2016-04-15 3 views
2

Я реализую как и не люблю на моей странице asp.net. Вот aspx страницаполучать два раза, как на моей странице при обновлении через панель обновления

<asp:UpdatePanel ID="VotePanel" runat="server" UpdateMode="Conditional" ChildrenAsTriggers="false"> 
    <ContentTemplate> 
     <div class="row"> 
      <!-- left column --> 
      <div class="col-lg-12 col-sm-12 col-xs-12"> 
       <div class="text-center"> 
        <h1> 
         <asp:Label ID="LikeLabel" runat="server" Text="Label"></asp:Label> 
         <br /> 
         <asp:Label ID="DislikeLabel" runat="server" Text="Label"></asp:Label> 
         <br /> 
         <div class="btn-group"> 
          <asp:Button ID="LikeButton" runat="server" CssClass="btn btn-default" Text="Like" 
           OnClick="LikeButton_Click" /><asp:Button ID="UnlikeButton" CssClass="btn btn-default" 
            runat="server" Text="Dislike" OnClick="UnlikeButton_Click" /> 
         </div> 
       </div> 
      </div> 
     </div> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="LikeButton" /> 
     <asp:AsyncPostBackTrigger ControlID="UnlikeButton" /> 
    </Triggers> 
</asp:UpdatePanel> 

это моя страница CS

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

public partial class Question : System.Web.UI.Page 
{ 
    ConnectionClass cl; 
    DataTable dt,dt1; 
    string QuestonId; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
      cl = new ConnectionClass(); 
      QuestonId = Request.QueryString["Id"]; 
      string[] var = { "@id" }; 
      SqlDbType[] type = { SqlDbType.Int }; 
      string[] value = { QuestonId }; 
      dt1 = cl.DatatableProcedure("GetQuestionLikeDislike", var, type, value); 
      LikeLabel.Text = dt1.Rows[0].ItemArray[0].ToString(); 
      DislikeLabel.Text = dt1.Rows[0].ItemArray[1].ToString(); 
      dt = cl.DatatableProcedure("GetAnswers", var, type, value); 
    } 
    protected void LikeButton_Click(object sender, EventArgs e) 
    { 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     dt1 = cl.DatatableProcedure("InsertLike&getLikeDislike", var, type, value); 
     VotePanel.Update(); 
    } 
    protected void UnlikeButton_Click(object sender, EventArgs e) 
    { 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     dt1 = cl.DatatableProcedure("InsertUnlike&getLikeDislike", var, type, value); 
     VotePanel.Update(); 
    } 
} 

Когда я запускаю эту страницу и нажмите на кнопку, как он реализует ее в два раза и, как увеличивается на 2. Пожалуйста, помогите меня с решением, так что подобное только увеличивается на единицу. Это будет большой поддержкой. Заранее спасибо! это мои хранимые процедуры:

ALTER procedure [dbo].[InsertUnlike&getLikeDislike] 
(
@id int 
) 
as 
begin 
update QuestionTable 
set Dislikes=Dislikes + 1 where [email protected]; 
select Likes, Dislikes from QuestionTable where [email protected] 
end 

ALTER procedure [dbo].[InsertLike&getLikeDislike] 
(
@id int 
) 
as 
begin 
update QuestionTable 
set Likes=Likes + 1 where [email protected]; 
select Likes, Dislikes from QuestionTable where [email protected] 
end 

ALTER procedure [dbo].[GetQuestionLikeDislike] 
(
@id int 
) 
as 
begin 
select Likes, Dislikes from QuestionTable where [email protected] 
end 
+1

Почему вы вызываете 'VotePanel.Update()' вручную? Обновление будет вызвано нажатием кнопки в любом случае, с этим вызовом вы обновите его дважды. Думаю, – Andrei

+0

@Anderi, я удалил эту строку из моего кода, но все еще работает то же самое –

ответ

0

Я обновил мою страницу CS для

процедур
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Data; 

public partial class Question : System.Web.UI.Page 
{ 
    ConnectionClass cl; 
    DataTable dt,dt1; 
    string QuestonId; 
    protected void Page_Load(object sender, EventArgs e) 
    {cl = new ConnectionClass(); 
      QuestonId = Request.QueryString["Id"]; 
      QuestonId = "1"; 
      string[] var = { "@id" }; 
      SqlDbType[] type = { SqlDbType.Int }; 
      string[] value = { QuestonId }; 
     if (!IsPostBack) 
     { 
      dt = cl.DatatableProcedure("GetQuestionDetail", var, type, value); 
      StatementLabel.Text = dt.Rows[0].ItemArray[0].ToString(); 
      MemberNameLabel.Text = cl.ReturnNameFromId(dt.Rows[0].ItemArray[4].ToString()).ToString(); 
      DateLabel.Text = dt.Rows[0].ItemArray[5].ToString(); 
      TagsLabel.Text = dt.Rows[0].ItemArray[3].ToString(); 
      ProblemLabel.Text = dt.Rows[0].ItemArray[1].ToString(); 
      LikeDislike(); 
      TriedLabel.Text = dt.Rows[0].ItemArray[2].ToString(); 
      dt = cl.DatatableProcedure("GetAnswers", var, type, value); 
      drawAnswers(); 
     } 
    } 
    public void LikeDislike() 
    { 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     dt1 = cl.DatatableProcedure("GetQuestionLikeDislike", var, type, value); 
     LikeLabel.Text = dt1.Rows[0].ItemArray[0].ToString(); 
     DislikeLabel.Text = dt1.Rows[0].ItemArray[1].ToString(); 
    } 
    public void drawAnswers() 
    { 
     Label lb = new Label(); 
     if(dt.Rows.Count==1) 
     lb.Text = dt.Rows.Count.ToString() +" Answer"; 
     else 
      lb.Text = dt.Rows.Count.ToString() + " Answer"; 
     AnswerPlaceHolder.Controls.Add(lb); 
     for (int i = 0; i < dt.Rows.Count; i++) 
     { 
      System.Web.UI.HtmlControls.HtmlGenericControl createDiv = 
        new System.Web.UI.HtmlControls.HtmlGenericControl("DIV"); 
      createDiv.ID = "createDiv" + i.ToString(); 
      Label[] l = new Label[5]; 
      for (int j = 0; j < 5; j++) 
      { 
       l[j] = new Label(); 
       l[j].Text = dt.Rows[i].ItemArray[j].ToString(); 
       createDiv.Controls.Add(l[j]); 
      } 
      AnswerPlaceHolder.Controls.Add(createDiv); 
     } 
    } 
    protected void LikeButton_Click(object sender, EventArgs e) 
    { 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     cl.executeProcedure("InsertLike", var, type, value); 
     LikeDislike(); 
    } 
    protected void UnlikeButton_Click(object sender, EventArgs e) 
    { 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     cl.executeProcedure("InsertUnlike", var, type, value); 
     LikeDislike(); 
    } 
} 

в

ALTER procedure [dbo].[InsertUnlike&getLikeDislike] 
(
@id int 
) 
as 
begin 
update QuestionTable 
set Dislikes=Dislikes + 1 where [email protected]; 
select Likes, Dislikes from QuestionTable where [email protected] 
end 

ALTER procedure [dbo].[InsertLike&getLikeDislike] 
(
@id int 
) 
as 
begin 
update QuestionTable 
set Likes=Likes + 1 where [email protected]; 
select Likes, Dislikes from QuestionTable where [email protected] 
end 

ALTER procedure [dbo].[GetQuestionLikeDislike] 
(
@id int 
) 
as 
begin 
select Likes, Dislikes from QuestionTable where [email protected] 
end 

и удалить свойство ChildAsTriggers из панели обновления. Это сработало! :)

2

Изменить вашу страницу метод загрузки, как показано ниже,

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     cl = new ConnectionClass(); 
     QuestonId = Request.QueryString["Id"]; 
     string[] var = { "@id" }; 
     SqlDbType[] type = { SqlDbType.Int }; 
     string[] value = { QuestonId }; 
     dt1 = cl.DatatableProcedure("GetQuestionLikeDislike", var, type, value); 
     LikeLabel.Text = dt1.Rows[0].ItemArray[0].ToString(); 
     DislikeLabel.Text = dt1.Rows[0].ItemArray[1].ToString(); 
     dt = cl.DatatableProcedure("GetAnswers", var, type, value);   
    }  
} 
+0

, когда я это делаю, тогда панель обновления не работает на все @Piyush –

+0

Он должен работать. Можете ли вы отлаживать и проверять, вызвано ли событие кнопки или нет? –

+0

скажите, пожалуйста, что еще я могу сделать –