这是我的控制器方法
[HttpPost]
public ActionResult RemoveValue()
{
return View();
}
这就是我试图访问方法的方法
@Ajax.ActionLink("Asenkron process", "RemoveValue")
但是,如果我删除HttpPost属性,那么它可以工作。
我在MVC 3 RC 2上测试了这个
答案 0 :(得分:0)
[HttpPost]
属性表示只能通过POST请求访问该方法。如果您要查看Firebug中的请求或类似内容,您会看到正在发出请求,并在响应中收到500
错误。
如果您希望链接执行POST,请将其更改为:
@Ajax.ActionLink("Asenkron process", "RemoveValue", new AjaxOptions {HttpMethod="POST"})
修改
在进一步阅读文档后,Ajax.ActionLink对其获得的结果不执行任何操作,除非您指定了要执行的操作。它似乎也默认执行POST,因此不需要AjaxOptions。如果要显示RemoveValue视图中的内容,则需要执行以下操作:
@Ajax.ActionLink("Text","RemoveValue", new AjaxOptions {UpdateTargetId="resultDiv" })
<div id="resultDiv">
</div>
resultDiv的内容将是Action返回的内容。
如果您正在寻找某种确认:
<script>
function onSuccess()
{
alert("Success!");
}
function onFailure()
{
alert("Failed!");
}
</script>
@Ajax.ActionLink("Text","RemoveValue", new AjaxOptions {OnSuccess="onSuccess", OnFailure="onFailure" })
当然,这是假设您需要异步请求。如果您想要一个普通的同步POST,浏览器转到新页面,请执行以下操作:
using(Html.BeginForm("ActionName","ControllerName",FormMethod.Post))
{
<input type="submit" value="Delete" />
}
如果您这样做,您发布的操作应以return RedirectToAction("AnotherAction");
结尾。然后,浏览器将向AnotherAction发出GET请求。当用户单击后退按钮并在浏览器中弹出“数据必须重新提交到页面”时,这可以防止重复操作。
希望这会有所帮助。
答案 1 :(得分:0)
可能围绕它的Ajax.BeginForm?
@using(Ajax.BeginForm(new AjaxOptions {UpdateTargetId =“resultDiv”,HttpMethod =“Get”})){ }