我把新闻页面生成静态页面,在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里
请教高手!
小弟先谢过了!
代码如下:
前台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里
请教高手!
小弟先谢过了!
你可将lbtnStatic隐藏掉,然后显示一个之前隐藏的liter控件,将它的text改成那个链接.
这里放一个LinkButton和一个a 方便控制些,显示数据列表的时候应该有生成的静态html名称这个字段吧,就根据这个字段是否为空来控制linkbutton和a的显示或隐藏就行了
<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>
类似这种写法,你试一下,有错误自己修改下
这么写的不好使吧
点击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;
}