繁体   English   中英

MVC:返回View()返回到http ActionResult,而不是渲染View

[英]MVC: return View() is going back to http ActionResult instead of rendering View

我有一个表格:

@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 ,此时我的参数为null。

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

这是因为您的表单发送回发请求并提交表单,您应该防止提交按钮的默认行为。 只需添加event.preventDefault或在javascript函数结束时return false

我认为这里发生的是你的表格被发布两次。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM