![](/img/trans.png)
[英]Can I send a message instead of a view back as an ActionResult with ASP.NET MVC4
[英]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.