无法使其与MVC 3一起工作

时间:2010-12-25 00:48:01

标签: c# .net asp.net asp.net-mvc-3

这是我的控制器方法

    [HttpPost]
    public ActionResult RemoveValue()
    {

        return View();

    }

这就是我试图访问方法的方法

@Ajax.ActionLink("Asenkron process", "RemoveValue")

但是,如果我删除HttpPost属性,那么它可以工作。

我在MVC 3 RC 2上测试了这个

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”})){ }