【问题标题】:Can't make it work Ajax with MVC 3无法使其与 MVC 3 一起使用 Ajax
【发布时间】:2010-12-25 00:48:01
【问题描述】:

这是我的控制器方法

    [HttpPost]
    public ActionResult RemoveValue()
    {

        return View();

    }

这就是我尝试访问方法的方式

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

但如果我删除 HttpPost 属性,那么它会起作用。

我已经在 MVC 3 RC 2 上测试过了

【问题讨论】:

  • 有人不知道吗?对你有用吗?
  • 我在做 MvcMusicStore 教程时也遇到了这个问题。

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


【解决方案1】:

[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 请求。这可以防止当用户单击后退按钮和浏览器中的“数据必须重新提交到页面”弹出窗口时重复操作。

希望这会更有帮助。

【讨论】:

  • 我也试过这个,但没有奏效。它对你有用吗?你测试了吗?
  • 进一步查看文档,我认为更合适的问题是您期望发生什么?我将用更多细节更新我的答案。
  • 我希望该方法会被调用,但它不会发生。
  • 还是没有运气。 Ajax.ActionLink 使用 Get 方法,即使我更改它的 HttpMethod 属性。我会发疯的。但我可以用纯 javascript 代码制作 ajax。
【解决方案2】:

也许有一个 Ajax.BeginForm 围绕它?

@using (Ajax.BeginForm(new AjaxOptions{ UpdateTargetId="resultDiv", HttpMethod="Get"})) { }

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 2013-09-13
    • 2018-11-22
    • 1970-01-01
    • 2013-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多