【问题标题】:MVC: return View() is going back to http ActionResult instead of rendering ViewMVC:return View() 将返回 http ActionResult 而不是渲染 View
【发布时间】:2017-05-19 08:50:22
【问题描述】:

我有一个表格:

@using (Html.BeginForm()){
    <dl class="dl-horizontal">
        <dt>@Html.LabelFor(m => m.VerifiedBy)<dt>
        <dd>@Html.TextBoxFor(m => m.VerifiedBy)</dd>
    </dl>
    <input type="submit" value="Verify" onclick="checkValueVerify();" />
}

如果用户在未输入验证者值的情况下单击验证按钮,JavaScript 函数 checkValueVerify 将发送警报,然后直接发送到 HttpPost 验证 ActionResult。

JavaScript:

function checkValueVerify() {
    if (document.getElementById("verifiedBy").value== "") {
         alert('Must enter name of verifier');
    } 
    $.ajax({
        url: '/GAC/Verify',
        type: 'POST',
        data: {'by': verifBy}
    });
}

控制器:

[HttpPost]
public ActionResult Verify(GACVerifyViewModel viewModel,string by)
{
    if(by==null)
        {
            //code                
            return View();
        }

当我单步执行代码时,它会从 return View 到 Verify.cshtml 到 Layout.cshtml,这正是我所期望的。但是,在 Layout.cshtml 的末尾,它又回到了[HttpPost] Verify,此时我的参数为空。

所以流程是 HttpPost 验证 -> Verify.cshtml -> HttpPost 验证(控制器 -> 视图 -> 控制器。 为什么它会回到我在控制器中的 HttpPost ActionResult 验证而不是仅仅渲染视图?

【问题讨论】:

  • 那么如果用户不输入值,是否要提交表单?
  • 我有,但我只是在他们没有输入值的部分遇到问题。

标签: javascript c# asp.net-mvc asp.net-mvc-4 http-post


【解决方案1】:

这是因为您的表单发送了一个回发请求并提交了表单,您应该防止提交按钮的默认行为。 只需在javascript函数末尾添加event.preventDefaultreturn false

【讨论】:

    【解决方案2】:

    我认为这里发生的情况是您的表单被发布了两次。

    一次通过 Ajax 调用,然后再次通过标准提交输入。

    一个简单的修复应该是添加 return false 例如:

    <input type="submit" value="Verify" onclick="checkValueVerify(); return false;" />
    

    返回 false 是停止提交输入发布表单,以便只有 Ajax 函数会发布。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2016-08-08
      • 1970-01-01
      • 2020-04-02
      相关资源
      最近更新 更多