2009-06-26 25 views
0

我正在写ASP.NET/C#项目,它是一个简单的博客页面与commnents。 问题我在点击按钮时看到的评论加载了原始blogload加上博客和评论,试图让它加载仅选中的博客/评论。 如果我尝试不在page_load中加载博客,或者只有在不回显时才会显示任何内容。任何帮助,将不胜感激。 PS我知道有很多博客引擎,但有特定的原因。什么时候在ASP.NET中呈现页面?

protected void Page_Init(object sender, EventArgs e) 
{ 
    //ParseControls(GlobalVar.pathxsltver); 
    //  BindInfo(); 
} 
private void ParseControls(string myxslt) 
{ 

    //load the data 
    FileStream fs = new FileStream(Server.MapPath (GlobalVar.compathver), FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
    DataSet dset = new DataSet(); 
    dset.ReadXml(fs); 
    fs.Close(); 
    XPathDocument xdoc = new XPathDocument(Server.MapPath(GlobalVar.pathver)); 
    XmlDocument mydoc = new XmlDocument(); 
    XPathNavigator navigator = xdoc.CreateNavigator(); 
    XPathExpression expression = navigator.Compile("BlogItems/Blog"); 
    expression.AddSort("ID", XmlSortOrder.Descending, XmlCaseOrder.UpperFirst, string.Empty, XmlDataType.Text); 
    XPathNodeIterator iterator = navigator.Select(expression); 
    int TheCnt = 0; 
    int cnt = GlobalVar.BlogCntDisplay; 
    string st = "<BlogItems>"; 
    foreach (XPathNavigator item in iterator) 
    { 
     TheCnt++; 
     string sid = item.SelectSingleNode("ID").Value; 
     st = st + "<Blog id=\"" + sid + "\">" + item.InnerXml; 
     st = st + "<ComCnt>" + MyFunc.CountComments (sid,dset) + "</ComCnt></Blog>"; 
     if (TheCnt == cnt) { break; } 
    } 
    st = st + "</BlogItems>"; 
    mydoc.LoadXml(st); 
    XslCompiledTransform transform = new XslCompiledTransform(); 
    XsltSettings settings = new XsltSettings(true,true); 
    transform.Load(Server.MapPath(myxslt),settings,null); 
    StringWriter sw = new StringWriter(); 
    transform.Transform(mydoc, null, sw); 
    string result = sw.ToString(); 
    //remove namespace 
    result = result.Replace("xmlns:asp=\"remove\"", ""); 
    //parse control 
    Control ctrl = Page.ParseControl(result); 
    //find control to add event handler 
    //Boolean test = phBlog.FindControl("btnComment2").i; 
    phBlog.Controls.Add(ctrl); 
    XmlNodeList nList = mydoc.SelectNodes("//BlogItems/Blog/ID"); 
    foreach (XmlNode objNode in nList) 
    { 
    Button btnComment = (Button) phBlog.FindControl("btnComment"+objNode.InnerText); 
    btnComment.CommandArgument = objNode.InnerText ; 
     btnComment.BorderWidth = 0 ; 

    btnComment.Command += new CommandEventHandler(Button1_Click); 
    } 
} 

protected void Page_Load(object sender, EventArgs e) 
{ 

    //if (!Page.IsPostBack) 
    //{ParseControls(GlobalVar.pathxsltver);} 
    ParseControls(GlobalVar.pathxsltver); 
    } 

protected void Button1_Click(object sender, CommandEventArgs e) 
{ 
    Label1.Text = "Comm hit : " + e.CommandArgument.ToString(); 
    ParseControls(GlobalVar.blogcommentsver); 
} 

回答

1

你的问题有点含糊,但如果我正确理解你,你想知道为什么整个页面刷新时,你只是想处理按钮点击?

无论何时做任何形式的回发,并且包括处理任何事件,都会重新呈现整个页面。除此之外,您正在使用一个全新的页面类实例。旧的已经死了,走了。这正是网络正常工作的方式。

如果您只想重新加载页面的一部分,则需要使用ajax。在ASP.Net域中,这意味着将您的评论部分放入可刷新的UpdatePanel控件中。

相关问题