Asp.net mvc 4 ASP.NETMVC4视图包含两个部分视图,每个部分视图中有一个表单
在我的MVC4应用程序中,我有一个索引视图。在这个视图中,我有两个div标记,其中渲染了局部视图。有两个按钮在单击时使用jQuery在这两个div之间切换。局部视图是强类型的,每个视图都有其模型 问题: 如何将模型传递到局部视图? 如何处理来自部分视图的POST请求? 在POST-action方法中,如果ModelState无效,如何重新呈现知道ModelState的视图 在这种情况下,局部视图是可行的吗? 有没有更好的方法用MVC4实现这一点 感谢您的帮助 以下是我尝试过但没有成功的方法: Index.cshtmlAsp.net mvc 4 ASP.NETMVC4视图包含两个部分视图,每个部分视图中有一个表单,asp.net-mvc-4,partial-views,modelstate,model-validation,strongly-typed-view,Asp.net Mvc 4,Partial Views,Modelstate,Model Validation,Strongly Typed View,在我的MVC4应用程序中,我有一个索引视图。在这个视图中,我有两个div标记,其中渲染了局部视图。有两个按钮在单击时使用jQuery在这两个div之间切换。局部视图是强类型的,每个视图都有其模型 问题: 如何将模型传递到局部视图? 如何处理来自部分视图的POST请求? 在POST-action方法中,如果ModelState无效,如何重新呈现知道ModelState的视图 在这种情况下,局部视图是可行的吗? 有没有更好的方法用MVC4实现这一点 感谢您的帮助 以下是我尝试过但没有成功的方法: I
<div id="token">
<!-- insert Token based PartialView -->
@{
//Html.RenderPartial("_TokenPartial");
Html.RenderAction("TokenBased");
}
@model TokenModel
@using (Html.BeginForm("CreateAgreementToken", "Credential"))
{
<div class="formscontent">
@Html.LabelFor(x => x.Token) <br />
@Html.TextBoxFor(x => x.Token, new {size = "44" })
@Html.ValidationMessageFor(x => x.Token)
<br />
<br />
@Html.LabelFor(x => x.Email) <br />
@Html.TextBoxFor(x => x.Email, new {size = "30" })
@Html.ValidationMessageFor(x => x.Email)
<br />
<br />
@Html.CheckBoxFor(x => x.AcceptSubsTerms, new { value = "SubsTerms"})
@Html.LabelFor(x => x.AcceptSubsTerms)
@Html.ValidationMessageFor(x => x.AcceptSubsTerms)
@Html.ActionLink("SubsTermsLinkText", "Subscription", null, new {target = "_blank"})
<br />
<br />
</div>
<br />
<input class="mainbutton" type="submit" value="CreateAgreement_btn_txt"/><br />
}
以下是局部视图:
TokenPartial.cshtml
<div id="token">
<!-- insert Token based PartialView -->
@{
//Html.RenderPartial("_TokenPartial");
Html.RenderAction("TokenBased");
}
@model TokenModel
@using (Html.BeginForm("CreateAgreementToken", "Credential"))
{
<div class="formscontent">
@Html.LabelFor(x => x.Token) <br />
@Html.TextBoxFor(x => x.Token, new {size = "44" })
@Html.ValidationMessageFor(x => x.Token)
<br />
<br />
@Html.LabelFor(x => x.Email) <br />
@Html.TextBoxFor(x => x.Email, new {size = "30" })
@Html.ValidationMessageFor(x => x.Email)
<br />
<br />
@Html.CheckBoxFor(x => x.AcceptSubsTerms, new { value = "SubsTerms"})
@Html.LabelFor(x => x.AcceptSubsTerms)
@Html.ValidationMessageFor(x => x.AcceptSubsTerms)
@Html.ActionLink("SubsTermsLinkText", "Subscription", null, new {target = "_blank"})
<br />
<br />
</div>
<br />
<input class="mainbutton" type="submit" value="CreateAgreement_btn_txt"/><br />
}
如何处理控制器操作方法、索引视图和部分视图之间的交互,就像在“正常”情况下,索引操作方法呈现一个索引视图并将其传递给模型实例一样。然后在Index POST操作方法中,如果验证失败,则通过调用索引视图并将无效模型传递给表单,重新显示表单
感谢您将模型传递给partial,您可以使用@Html.partial(“SomeFile”,SomeModel)进行传递 如果您有多个表单,我建议您为每个表单提供不同的控制器操作。您可以使用@Html.BeginForm指定控制器和操作参数 分部只是组织html的一种方式。一旦页面被呈现,它们就没有上下文,所以我不会太担心这个问题
为了让视图了解模型状态中的错误,需要将其传递给模型。不要重定向到索引,而是返回索引视图并将模型作为第二个参数传入。非常感谢您的用户1714792。你的回答帮助我走上了正确的道路。我喜欢这个地方。
[HttpPost]
public ActionResult CreateAgreementToken(TokenModel model)
{
if (ModelState.IsValid)
{
// Create Agreement
//
//
return RedirectToAction("Welcome");
}
// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user credentials provided are incorrect.");
// Where to redirect to.
// How to re-render the Index view that's aware of the ModelState errors
return RedirectToAction("Index");
}