2009-06-26 5 views
0

Ich schreibe am ASP.NET/C# Projekt, es ist eine einfache Blogseite mit Inhalten. Problem Ich habe wenn Knopf klicken Sie sehen Kommentare laden Original Blogload plus Blogs und Kommentare, versuchen, es zu laden Blog/Kommentar nur ausgewählt. Wenn ich versuche, Blog in page_load zu laden oder es nur tun, wenn kein Postback angezeigt wird, wird nichts angezeigt. Jede Hilfe wäre willkommen. PS Ich weiß, dass es viele Blog-Engines gibt, aber einen bestimmten Grund haben.Wann wird eine Seite in ASP.NET gerendert?

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); 
} 

Antwort

1

Sie sind Frage ist eine Art vage, aber wenn ich Sie richtig verstehe, Sie sich fragen, warum die ganze Seite aktualisiert, wenn Sie nur auf die Schaltfläche klicken wollen behandeln?

Wenn Sie irgendeine Art von Postback durchführen, und das die Behandlung von Ereignissen einschließt, wird die gesamte Seite erneut gerendert. Darüber hinaus arbeiten Sie mit einer brandneuen Instanz Ihrer Seitenklasse. Der alte ist tot und weg. So funktioniert das Web normalerweise.

Wenn Sie nur einen Teil der Seite neu laden möchten, müssen Sie Ajax verwenden. In ASP.Net-Land bedeutet dies, dass Sie Ihren Kommentarabschnitt in ein UpdatePanel-Steuerelement einfügen, das aktualisiert werden kann.