我有一个Projects实体。项目列表显示在Scaffolded List View中,如下所示。编辑 - 详细信息 - 删除是由模板生成的ActionLink。每个链接到新的控制器操作并加载另一个视图
ProjectName | Created By | Created On | Status |
-------------|------------|------------|--------|--------------------
Test Project | USER1 | 12/31/2010 | NEW | Edit |Details |Delete
每个项目都有一个状态 - 新建,已批准,已拒绝。 我想添加名为Approve and Denied的列表的链接,这些链接不加载视图。他们只是改变了项目的状态。我相信这些将是HTTP Post Links。我用google搜索,但没有找到一个好的工作示例。
ProjectName | Created By | Created On | Status |
-------------|------------|------------|--------|------------------------------------
Test Project | USER1 | 12/31/2010 | NEW | Edit |Details |Delete|Approve|Denied
答案 0 :(得分:2)
您可以使用AJAX:
@Ajax.ActionLink(
"approve project",
"Approve",
new { projectId = item.ProjectId },
new AjaxOptions { HttpMethod = "POST" }
)
您当然会有一个相应的控制器操作来处理批准项目:
[HttpPost]
public ActionResult Approve(int projectId)
{
...
}
您还可以使用OnSuccess
的{{1}}和OnFailure
属性来定义在发生这些事件时将调用的各个javascript函数。
有人要求AjaxOptions
帮助者做一些有用的事情,您需要在页面中加入Ajax.*
脚本:
jquery.unobtrusive-ajax.js
并且必须在web.config中启用不显眼的AJAX:
<script type="text/javascript" src="@Url.Content("~/scripts/jquery.unobtrusive-ajax.js")"></script>
答案 1 :(得分:0)
@Html.ActionLink
辅助方法为锚标记生成HTML标记,单击它们通常会执行 HTTPGET 方法。如果您要执行 HTTPPOST 操作,您可以使用Html.ActionLink
帮助程序生成一个链接并使用javascript,覆盖默认链接行为以对另一个操作方法执行HTTPPost
更改数据库中的状态。您可以使用preventDefault方法来阻止默认链接行为(导航新页面)
@Html.ActionLink("Approve","Approve","Project",new { @id="someid"},new { @class="delClass"})
@Html.ActionLink("Denied","Denied","Project",new { @id="someid",anotherParam="someval"},new { @class="delClass"}))
假设您的控制器名称为Project
。
使用一些jQuery代码覆盖默认链接行为并对action
方法进行AJAX发布(HTTP Post)
<script type="text/javascript">
$(function(){
$(".delClass").click(function(e){
e.preventDefault(); // prevent the default behaviour
$.post(($this).attr("href"),function(data){
//Do whatever with the resutl received from the action method call.
//alert(data); // may be alert ?
});
});
});
</script>
立即使用Action
方法处理此问题
[HttpPost]
public ActionResult Approve(string id)
{
//Do the backend transaction with the id value.
return Content("Approved");
}
[HttpPost]
public ActionResult Denied(string id,string anotherParam)
{
//Do the backend transaction with the parameters value.
return Content("Denied");
}