我把新闻页面生成静态页面,在gridview里有列是是“生成静态页面”,是LinkButton的按钮,当点击这个时就生成静态页面,当成功后,LinkButton的Text变成“查看”,就是要跳转到刚刚生成的这个页面去!现在生成静态页面是成功了,但是就是不是能跳转到生成的静态页面去!
代码如下:
前台gridview里面的部分代码<asp:TemplateField HeaderText="生成静态页面">
                <ItemTemplate>
                    <asp:LinkButton ID="lbtnStatic" runat="server" CausesValidation="False" 
                        CommandName="Select" Text="生成静态页面"></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
 //生成静态页面
        protected void grvNews_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            string nid = grvNews.DataKeys[e.NewSelectedIndex].Value.ToString();
            LinkButton lbtnStatic = (LinkButton)grvNews.Rows[e.NewSelectedIndex].FindControl("lbtnStatic");
            string r = string.Empty;
            SqlDataReader dr = null;
            StreamReader sr = null;
            StreamWriter sw = null;
            try
            {
                //读取静态页模板
                FileStream fs = new FileStream(Server.MapPath("/news/news.htm"),FileMode.Open);
                sr = new StreamReader(fs);
                
                //替换字符串
                dr = SqlHelper.ExecuteReader(CommandType.StoredProcedure, "SelectNewsInfo", new SqlParameter("@nid", nid));
                if(dr.Read())
                {
                    r = sr.ReadToEnd();
                    r = r.Replace("{staticnews:title}", dr["ntitle"].ToString());
                    r = r.Replace("{staticnews:adddatetime}", Convert.ToDateTime(dr["addDatetime"]).ToString("yyyy-MM-dd"));
                    r = r.Replace("{staticnews:content}",dr["ncontent"].ToString());
                }
                //输出字符串
                string printfile = DateTime.Now.ToString("yyMMddHHmmss_fffffff ") + ".htm";
                sw = new StreamWriter(Server.MapPath("/news/"+printfile), false, System.Text.Encoding.Default);
                sw.Write(r);
                //判断是否生成成功
                if(File.Exists(Server.MapPath("/news/"+printfile)))
                {        
                   //将页面名称插入到数据库中
                    UpdateHtmlFile(nid, printfile);
                     //就是这里是跳转的页面的代码,SelectHtmlName(nid)是返回静态页面的名称,
                     //开始我用的LinkButton的postBackUrl也不行!
                    lbtnStatic.Text = "<a href=../news/" + SelectHtmlName(nid) +".htm>查看</a>";                }
                
            }
            catch (Exception)
            {            }
            finally
            {
                sr.Close();
                sw.Close();
                dr.Close();
            }
        }
这个管理页面在  项目名称\Admin里
静态页面存放在  项目名称\news里
请教高手!
小弟先谢过了!

解决方案 »

  1.   

    LinkButton的text是改变不了链接属性的.
    你可将lbtnStatic隐藏掉,然后显示一个之前隐藏的liter控件,将它的text改成那个链接.
      

  2.   

    +1
    这里放一个LinkButton和一个a 方便控制些,显示数据列表的时候应该有生成的静态html名称这个字段吧,就根据这个字段是否为空来控制linkbutton和a的显示或隐藏就行了
      

  3.   

    <asp:TemplateField HeaderText="生成静态页面">
                    <ItemTemplate>
                        <asp:LinkButton ID="lbtnStatic" runat="server" CausesValidation="False" 
                            CommandName="Select" Text="生成静态页面" style='display:<%# Eval("HtmlName").ToString() == "" ?"none":"inline"'></asp:LinkButton>
    <a href="...." style='display:<%# Eval("HtmlName").ToString() == "" ?"none":"inline"' target="_blank">查看</a>
                    </ItemTemplate>
                </asp:TemplateField>
    类似这种写法,你试一下,有错误自己修改下
      

  4.   

    lbtnStatic.Text = "<a href=../news/" + SelectHtmlName(nid) +".htm>查看</a>";
    这么写的不好使吧
      

  5.   

    使用hyperlink,button
    点击button生成页面,隐藏 button,显示hyperlink
    protected void Button1_Click(object sender, EventArgs e)
      {
      Button btn= (Button)sender;
      GridViewRow row = btn.NamingContainer as GridViewRow;   
      string a = ((Label)row.FindControl("Label1")).Text;
      }