我在这里遇到了一些麻烦。我认为公司可以竖起或缩小我们网站的用户。用户列在表格中,列具有公司投票或反对用户的小手图像。我在那里编写了ActionLink,但是,每次公司投票给用户时,我都不希望发生回发。
我决定用公司投票的用户ID填写一个列表,然后,当离开页面时,过滤器会拦截请求,获取列表并处理投票。在this post中,我学习了如何在调用Action时初始化Filter参数,但正如您所看到的,我需要一种方法让Filter在用户退出View时获取列表,而不是在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
}
}
我相信有一种简单的方法,因为大多数网站都有这种功能。任何人都可以指导我吗?
答案 0 :(得分:3)
为什么不使用调用控制器方法的AJAX?如果正确设置了json,它仍然会被反序列化为一个对象。
据我所知,即使在MVC心态中也是如此。如果您需要保留数据,但不更新整个页面,这是我所知道的唯一方式。您甚至可以使用AJAX交换整个部分视图。
我认为这里常见的误解是视图部分(MVC)不仅仅是一个页面,而是实际上由一个页面中的一些视图组成。因此,单独更新其中一个视图并不能真正打破这种模式。
答案 1 :(得分:0)
绝对选择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>
然后你在Controller上的行动
[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();
}