2013-04-04 4 views
0

Я разработал стену (вложенные комментарии), где люди могут комментировать обрывки (сообщения). Он включает в себя функцию «thumb-up/down», проблема в том, что когда я нажимаю на большие пальцы вверх, перезагружается вся страница. Мне нужен только ярлык, который отображает количество голосов (нравится), которые нужно обновить, и ничего больше. Как я могу это сделать? Это моя попытка, которая не работает .. ASPX:Обновление метки в GridView?

<asp:ImageButton ID="lnklike" runat="server" ImageUrl="~/Images/thumbsup.png" height="20px" Width="20px" CommandName="like" CommandArgument='<%# Eval("ScrapId")%>'/> &nbsp; 
<asp:UpdatePanel ID="UpdatePanel1" runat="Server"> 
    <Triggers> 
     <asp:AsyncPostBackTrigger controlid="lnklike" eventname="click" /> 
    </Triggers> 
    <ContentTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Controls_GetUserScraps.abc((int)Eval("ScrapId")) %>' /> 

protected void GridViewRowCommand(Object sender, GridViewCommandEventArgs e) 
{ 

    var scrapId = Int32.Parse(e.CommandArgument.ToString()); 

    switch (e.CommandName) 
    { 
     case "like": 

      string chklike = "select likestatus from tbl_like where fromid='" + Session["UserId"] + "' and scrapid='" + scrapId + "'"; 
      int a = dbo.GetLikesMethod(chklike); 
      string chkthumbsdown = "select thumbsdownstatus from tbl_like where fromid='" + Session["UserId"] + "' and scrapid='" + scrapId + "'"; 
      int b = dbo.GetLikesMethod(chkthumbsdown); 

      if (a == 0 && b == 0) 
      { 
       string sendlike = "insert into tbl_like (ScrapId,FromId,LikeStatus) values('" + scrapId + "','" + Session["UserId"] + "',1)"; 
       dbo.insert(sendlike); 
       //abc(scrapId); 
       GetUserScraps(int.Parse(Request.QueryString["Id"].ToString())); 
      } 
      else if (a != 0) 
      { 

       Response.Write("already liked"); 
      } 
      else if (b != 0) 
      { 
       Response.Write("you can not like something you already downvoted!"); 
      } 

      break; 
    } 
} 

метод, чтобы получить количество пальца вверх/любит:

public static int abc(int scrpid) 
{  
    string getlikes = "select COUNT(*) from tbl_like inner join Scrap on tbl_like.scrapid=Scrap.Id where tbl_like.likestatus=1 and tbl_like.scrapid='" + scrpid + "'"; 

    dboperation dbo = new dboperation(); 
    int a = dbo.GetLikesMethod(getlikes); 

    return a; 
} 

public void GetUserScraps(int Id) 
{ 
    string getUserScraps = "SELECT u.Id as UserId,u.firstname,u.ImageName,s.FromId,s.ToId,s.Message,s.SendDate,s.ID as ScrapId FROM [tbl_user] as u, Scrap as s WHERE u.Id=s.FromId AND s.ToId='" + Request.QueryString["Id"].ToString() + "'"; 
    //string getlikes = "select COUNT(*) from tbl_like inner join Scrap on tbl_like.scrapid=Scrap.Id where tbl_like.likestatus=1 and tbl_like.scrapid='"+<%#DataBinder.Eval(Container.DataItem,"ScrapId")%>+"'"; 
    // <%#DataBinder.Eval(Container.DataItem,"ScrapId")%> 

    dt = dbClass.ConnectDataBaseReturnDT(getUserScraps); 
    if (dt.Rows.Count > 0) 
    { 
     GridViewUserScraps.DataSource = dt; 
     GridViewUserScraps.DataBind(); 
    } 
} 
+0

Не могли бы вы рассказать о том, что вы подразумеваете под словом «не работает»? Всякий раз, когда вы говорите что-то не работает, вы всегда должны четко определять ожидаемое поведение и текущее (неправильное) поведение. – jadarnel27

+0

@ jadarnel27 не работает, я имею в виду, что вся страница перезагружается, когда я использую приведенный выше код (или весь GridView). Я хочу обновить только метку, которая показывает количество в той строке, где пользователь нажимает на Thumbs Up или Like imagebutton – Arbaaz

ответ

1

В сетке я хотел бы добавить ссылку, как это:

<asp:TemplateField ItemStyle-Wrap="false" ItemStyle-Width="35px"> 
    <ItemTemplate> 
     <a href="javascript:void(0);" onclick="Link to your javascript method/ajax method"> 
             </a> 
    </ItemTemplate> 
    <ItemStyle Wrap="False"></ItemStyle> 
</asp:TemplateField> 

Затем с помощью JQuery Ajax вызова как this

Возвращение вы г нового отсчета в формате JSON и обновление метки

Ajax вызов

function UpdateLikeStatus(imageID, labelid) 
{ 
     $.ajax({ 
       type: 'POST', 
       contentType: "application/json; charset=utf-8", 
       url: 'Services/MiscService.asmx/UpdateLikeStatus', 
       data: "{'imageid':'" + imageID + "'}", 
       dataType: "json", 
       success: function (data) { 
        //This is the label you want to update with the new count. 

        $('#labelid').html(data.d); 

       } 
      }); 
} 

Это будет ваш Webservice вызов, который также может быть использован в службе WCF. Чтобы посмотреть, как реализовать вебсервис AJAX выглядеть HERE

[WebMethod(EnableSession = true)] 
[ScriptMethod(UseHttpGet = true, ResponseFormat = ResponseFormat.Json)] 
public string UpdateLikeStatus(string imageid) 
{ 
    string returnedData = "";   
    //Make call to stored procedure that does the update 
    returnedData = Storedprocedurecall.UpdateLikeStatus(imageid); //Updates the status and returns a count 
    //Now return the new count. 
    return returnedData; 

} 

На событии нажатия изображения или что вы используете для обновления как статуса.

<img src="" id="genericimage" border="0" onclick="UpdateLikeStatus('<%#Eval("imageid") %>', this);" /> 

ImageID = идентификатор изображения которой вы хотите обновлять, например статус

Если вы до сих пор не понимаю, дайте мне знать.

+0

I никогда не использовали Ajax или Json, чтобы сделать что-то подобное, можете объяснить немного подробно, как я должен делать эту работу? Я проверил вашу ссылку, и я не мог понять ее, как я могу реализовать этот код в этом случае? – Arbaaz

+0

Посмотрите обновленный код выше. – derral

Смежные вопросы