سؤال

وأنا أكتب مشروع ASP.NET/C# صباحا، انها صفحة بلوق بسيطة مع commnents. المشكلة أواجه عند النقر على زر ترى تعليقات تحميل blogload الأصلي بالإضافة إلى بلوق والتعليقات، في محاولة للحصول عليه لتحميل بلوق / تعليق المحددة فقط. إذا حاولت عدم تحميل بلوق في 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 ); 
}
هل كانت مفيدة؟

المحلول

وأنت السؤال كنت هو نوع من الغموض، ولكن إذا كنت فهمت بشكل صحيح، كنت أتساءل لماذا صفحة كاملة ينعش عندما كنت ترغب فقط في التعامل مع النقر على زر؟

وكلما كنت تفعل أي نوع من إعادة النشر، وهذا يشمل التعامل مع أي أحداث، و<م> كامل الصفحة وإعادة تقديمها. أكثر من ذلك، كنت تعمل مع مثيل جديد من فئة صفحتك. القديم قد مات وذهب. هذا هو مجرد وسيلة شبكة الإنترنت يعمل بشكل طبيعي.

إذا كنت تريد فقط لتحميل جزء من الصفحة، تحتاج إلى استخدام اياكس. في أرض ASP.Net، وهذا يعني وضع قسم التعليقات الخاصة بك داخل عنصر تحكم UpdatePanel التي يمكن أن تكون منتعشة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top