1

我在这里遇到了一些麻烦。我认为公司可以对我们网站的用户赞不绝口。用户列在一个表格中,一列有公司投票支持或反对用户的小手图像。我在那里编写了一个 ActionLink,但是,我不希望每次公司对用户投票时都发生回发。

我决定用公司投票的用户 ID 填写一个列表,然后在离开页面时,过滤器会拦截请求,获取列表并处理投票。在这篇文章中,我学习了如何在调用 Action 时初始化过滤器参数,但正如您所见,我需要一种方法让过滤器在用户退出视图时获取列表,而不是在操作中。

我不想使用代码隐藏,因为与 MVC 配对,这不是最佳实践,但回发也不是一种选择。

这是我到目前为止所拥有的:

public ActionResult ListUsers()
{
    // Create a List with user models and send it to a View,
    // which generates a WebGrid

    return View(userList);
}

public class PromoteUsersFilter : ActionFilterAttribute
{
    public int[] UsersToPromote { get; set; }
    public int[] UsersToScrewWith { get; set; }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        //insert promoting logic here
    }
}

我相信有一种简单的方法可以做到这一点,因为大多数网站都有这种功能。任何人都可以指导我吗?

4

2 回答 2

3

为什么不使用调用控制器方法的 AJAX?如果你正确地设置了你的 json,它仍然会被反序列化为一个对象。

据我所知,即使在 MVC 思维模式下也可以。如果您需要保留数据,但不更新整个页面,这是我知道的唯一方法。您甚至可以使用 AJAX 交换整个部分视图。

我认为这里常见的误解是(MVC 的)视图部分不仅仅是一页,而是实际上由多个视图组成,这些视图被粉碎到一页中。因此,单独更新其中一个视图并不会真正打破这种模式。

于 2012-04-13T17:00:05.513 回答
1

绝对选择 AJAX 解决方案:

在您看来,它可能看起来像这样:

<div>
    <span class="cssUpvote" id="upvote"><span>
    <span class="cssDownvote" id="downvote"></span>
</div>

用一些 Jquery

<script>
   $(document).on('click', 'upvote', function (event) {

       $.ajax({
             type: 'POST',
             url: '/Votes/Upvote',
             data: { id: companyId }
       });
   });

   $(document).on('click', 'downvote', function (event) {

       $.ajax({
             type: 'POST',
             url: '/Votes/Downvote',
             data: { id: companyId }
       });
   });
</script>

然后你对控制器的操作

[HttpPost]
public ActionResult Upvote(int id)
{
    //Do something with the (company)id
    return Json();
}

[HttpPost]
public ActionResult Downvote(int id)
{
    //Do something with the (company)id
    return Json();
}
于 2012-04-13T17:33:18.193 回答