C# 如何创建stackoverflow';什么是类似jquery/ajax功能的投票后功能?

C# 如何创建stackoverflow';什么是类似jquery/ajax功能的投票后功能?,c#,jquery,ajax,asp.net-mvc-2,C#,Jquery,Ajax,Asp.net Mvc 2,我可以像stackoverflow的post-voting函数一样,使用Jquery调用一个操作,然后在成功时更改图像吗 在我看来,我正在使用以下代码,但我不想刷新浏览器。有人能为我提供一些关于这个的代码吗 非常感谢 <%if (!item.IsPrinted) { %> <%=Html.ImageLink("~/Content/images/web/delete.png", "printed", "MarkAsPrinted", "Order", item.Task

我可以像stackoverflow的post-voting函数一样,使用Jquery调用一个操作,然后在成功时更改图像吗

在我看来,我正在使用以下代码,但我不想刷新浏览器。有人能为我提供一些关于这个的代码吗

非常感谢

<%if (!item.IsPrinted)
{ %>
     <%=Html.ImageLink("~/Content/images/web/delete.png", "printed", "MarkAsPrinted", "Order", item.TaskID, null, null)%>
 <%}
 else
  {%>
       <img src="~/Content/images/web/star.png" alt="printed" />                    
  <% }  %>

我不确定您是否完全理解ajax的确切含义

通常在没有ajax的情况下发出请求的方式基本上是:

[browser request]->[server handles request]->[new page sent to browser]
ajax的不同之处在于,请求被发送到服务器,响应由javascript接收,而不需要重新加载页面或做任何事情。然后由javascript脚本决定在收到请求后要做什么


为此,您要做的是将请求发送到“vote.asp”或其他地方,然后在收到服务器的响应后使用javascript更改图像。

通常,您应该通过ajax调用来调用帮助器方法,而不是通过ajax调用您的操作。然后,在helper方法中,更新分数的值(如将最新值存储到数据库等),在ajax的success方法中,显示适当的图像

编辑:

public string UpdateVoteScore(int postId, int value) {
     // store value to database

     return "success";
}
在JavaScript中:

var UpdateScore = function(postId, newValue) {
   $.ajax({
           type: "POST",
           url: /YourController/UpdateVoteScore,
           data: { postId: postId, value: newValue },
           success: function(result) {
              // replace your image
              $("#MyImage" + postId).attr("src", "some new image path here");
           },
           error: function(req, status, error) {
           }
    });
}
鉴于:

<img id='<%= "MyImage" + post.Id %>' 
     src="some image path"
     onclick="UpdateScore(scoreValueHere);"></img>


注意:
post
将在循环中更改,因此
post.Id
将是唯一的,从而使图像Id唯一

是的,您可以使用JQuery进行此操作。例如,让JQuery根据从服务器脚本中得到的内容替换HTML代码的一部分

样本:

<html>
  <head>
    <script type="text/javascript" src="jquery-1.3.1.js"></script>
    <script type="text/javascript" src="jquery.form.js"></script>
    <script>
      $(document).ready(function(){
        $('#response a').bind('click',function(event){
          event.preventDefault();
          $.get(this.href,{},function(response){
          if (response.indexOf("OK") >= 0) {
            $('#response').html("<img src="~/Content/images/web/star.png" alt="printed" /> ");
          }
          })    
        })
      });
    </script>
  </head>
  <body>
    ... the other things on you're page
    <div id="response">
      <%=Html.ImageLink("~/Content/images/web/delete.png", "printed", "MarkAsPrinted", "Order", item.TaskID, null, null)%>
    </div>
    ... more things on you're page...
  </body>
</html>

$(文档).ready(函数(){
$(“#响应a”).bind('click',函数(事件){
event.preventDefault();
$.get(this.href,{},函数(响应){
if(response.indexOf(“OK”)>=0){
$('#response').html(“”);
}
})    
})
});
... 你页面上的其他内容
... 你的页面上有更多内容。。。

确保服务器脚本在需要替换“respone”分区中的内容时返回“OK”。

您可能可以执行以下操作:

$('#vote_button').click(function() {
   $.ajax({
      type: "GET",
      url: "script_name.asp", //your script that talks to the database
      data: "id=" + some_var, //get arguments
      success: $("#image_to_be_changed").attr("src", "some new image path here");
});

我使用angularjs、php和mysql创建了一个类似于stackoverflow.com的应用程序,并提供了下载代码。您只需要将2个php文件更改为ASP.NET文件。其他一切都会完好无损。使用AngularJS创建投票应用程序更简单、更灵活。

@incrediman,感谢您的解释。你有关于这个的示例代码吗?很抱歉,我在这方面没有太多经验。@Daoming Yang:这里有一个完整的教程,介绍如何在jQuery中使用Ajax:@Kdeveloper,这个解决方案很好,但它会影响其他链接。我是否可以调用该操作并替换图像而不刷新页面。@杨道明:我更新了脚本,所以您不必在脚本中硬编码HTML。不过,我不确定你所说的其他链接是什么意思。顺便说一句,点击链接不会导致页面刷新(请参阅:“event.preventDefault();”),谢谢。“$('a').bind('click',function(event)”将停止页面上的所有链接,有什么建议吗?@Daoming Yang:更新了脚本,JQuery选择器现在应该只选择'response'div中的链接。我假设您使用的是ASP.NET MVC,使用的是“我可以使用JQuery调用操作吗?”,如果没有,请指定.Thanksys。我使用的是asp.net mvc2。我已经尝试了您的代码,但不确定为什么没有触发onclick。确保在视图中包含javascript文件@Mahesh Velago的可能副本,感谢您提供的解决方案,但它只适用于第一次单击和第一张图像,我有一个通过ugh foreach来自数据库。我认为这可能是img标签ID的问题,他们都有一些图像ID。有什么想法吗?是的,你的图像ID需要为每个条目不同,并且可能是你想发送帖子/答案ID给你的助手方法,并将此ID附加到你的图像ID,使其唯一,我会更新代码