【问题标题】:Ajax actionlink stops working when adding [HttpPost] to the action method将 [HttpPost] 添加到操作方法时,Ajax actionlink 停止工作
【发布时间】:2015-04-27 08:46:48
【问题描述】:

ajax actionlink 如下所示:

@Ajax.ActionLink("Create account", "RegisterNewUser", "RegisteredUsers", new AjaxOptions { UpdateTargetId = "updaterDiv", HttpMethod = "POST" }, new { @class = "actionButtons" }

当 RegisterNewUser 操作看起来像这样时:

public ActionResult RegisterNewUser(string uName, string email, string password)
    {
        ViewBag.Message = "Register";
        string msg = "";

        if (!users.RegisterUser(uName, email, password))
        {
            msg = "The provided email already exists";
        }

        ViewBag.DeniedMsg = msg;
        return PartialView("_Register");            
    }

ajax actionlink 工作正常。但是当我将[HttpPost] 添加到操作方法(顺便说一句,由ajax actionlink 调用)时,链接停止响应。当我点击它时没有任何反应。我究竟做错了什么?包含链接的表单如下所示:

@using (Html.BeginForm(new { @class = "registerForm" }))
    { 
        @Html.LabelFor(model => model.nickName)
        @Html.TextBoxFor(model => model.nickName, new { @class = "RegisterControls" })
        <br /><br />

        @Html.LabelFor(model => model.email)
        @Html.TextBoxFor(model => model.email, new { @class = "RegisterControls" })
        @Html.ValidationMessageFor(model => model.email)
        <br /><br />            

        @Html.LabelFor(model => model.password)
        @Html.PasswordFor(model => model.password, new { @class = "RegisterControls", id = "firstPassword" })
        <br /><br />

        @Html.LabelFor(model => model.confirmPassword)
        @Html.PasswordFor(model => model.password, new { @class = "RegisterControls" })
        @Html.ValidationMessageFor(model => model.confirmPassword)
        <br /><br /><br />
        <hr style="color: #D5E0EE; border: solid; border-style: double;" />

        @Ajax.ActionLink("Create account", "RegisterNewUser", "RegisteredUsers", new AjaxOptions { UpdateTargetId = "updaterDiv", HttpMethod = "POST" }, new { @class = "actionButtons" })
        <br /><br />
        <p style="color: red">@ViewBag.DeniedMsg</p>
    }

我可能做错了什么?

【问题讨论】:

  • 为什么在表单中有@Ajax.ActionLink()RegisterNewUser() 是 GET 还是 POST 方法?你想做什么?

标签: asp.net ajax asp.net-mvc razor asp.net-mvc-5


【解决方案1】:

如果您打算使用 Ajax 扩展发布表单数据,您需要将表单更改为使用 Ajax.BeginForm 并将按钮替换为提交按钮:

@using (Ajax.BeginForm("RegisterNewUser", "RegisteredUsers", new AjaxOptions { UpdateTargetId = "updaterDiv" }))    
{
  ....form data
   <input type="submit" value="Create account" />

}

还要确保在表单中包含updaterDiv

您需要将[HttpPost] 添加到您的控制器操作中,我还将更改它以将您在原始视图中拥有的模型也作为发布的参数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-26
    • 1970-01-01
    • 2013-07-06
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多