Когда страница отображается в ASP.NET? - PullRequest
0 голосов
/ 26 июня 2009

Я пишу проект ASP.NET/C#, это простая страница блога с компонентами. У меня проблема, когда при нажатии кнопки вы видите комментарии, загружающие оригинальную загрузку блога плюс блоги и комментарии, пытаясь заставить его загрузить только выбранный блог / комментарий Если я пытаюсь не загружать блог в page_load или делать это только в том случае, если нет обратной передачи, ничего не отображается. Любая помощь будет оценена. PS Я знаю, что есть много блоговых движков, но у них есть конкретные причины.

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 Ответ

1 голос
/ 26 июня 2009

Ваш вопрос довольно расплывчатый, но если я вас правильно понимаю, вам будет интересно, почему обновляется вся страница, когда вы просто хотите обработать нажатие кнопки?

Всякий раз, когда вы делаете какую-либо обратную передачу, включая обработку любых событий, страница вся перерисовывается. Более того, вы работаете с новым экземпляром класса вашей страницы. Старый мертв и ушел. Так работает сеть.

Если вы хотите перезагрузить только часть страницы, вам нужно использовать ajax. В земле ASP.Net это означает размещение раздела комментариев внутри элемента управления UpdatePanel, который можно обновить.

...