在我的 MVC 4 应用程序中,我有一个索引视图。在这个视图中,我有两个 div 标签,其中呈现了部分视图。有两个按钮在单击时使用 jQuery 在这两个 div 之间切换。Partial Views 是强类型的,每个都有它的模型。
问题:
如何将模型传递给局部视图?如何处理来自部分视图的 POST 请求?在 POST 操作方法中,如果 ModelState 无效,我如何重新渲染知道 ModelStae 的视图?
在这种情况下,部分视图是要走的路吗?使用 MVC 4 是否有更好的方法来实现这一点?
任何帮助表示赞赏。
这是我尝试过的但没有成功的方法:
索引.cshtml
<div id="token">
<!-- insert Token based PartialView -->
@{
//Html.RenderPartial("_TokenPartial");
Html.RenderAction("TokenBased");
}
<div id="credentials">
<!-- insert Credentials based PartialView -->
@{
//Html.RenderPartial("_CredentialPartial");
Html.RenderAction("CredentialsBased");
}
</div>
我尝试过HTML.RenderPartial("_partial")
但无法指定部分视图所基于的模型。然后我尝试使用Html.RenderAction("TokenBased")
并在此操作中返回带有此视图模型实例的部分视图:
凭据控制器.cs
public ActionResult TokenBased(string token)
{
...
return View("_TokenPartial", new TokenModel);
}
这是部分视图:
TokenPartial.cshtml
@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 />
}
这是 POST 操作方法:
[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");
}
如何处理控制器操作方法、索引视图和部分视图之间的交互,就像在“正常”情况下,您有一个索引操作方法渲染一个索引视图,并将其传递一个模型实例。然后在 Index POST 操作方法中,如果验证失败,则通过调用 Index 视图将无效模型传递给它来重新显示表单。
谢谢