Asp.net mvc 4 ASP.NETMVC4视图包含两个部分视图,每个部分视图中有一个表单

Asp.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

在我的MVC4应用程序中,我有一个索引视图。在这个视图中,我有两个div标记,其中渲染了局部视图。有两个按钮在单击时使用jQuery在这两个div之间切换。局部视图是强类型的,每个视图都有其模型

问题:

如何将模型传递到局部视图? 如何处理来自部分视图的POST请求? 在POST-action方法中,如果ModelState无效,如何重新呈现知道ModelState的视图

在这种情况下,局部视图是可行的吗? 有没有更好的方法用MVC4实现这一点

感谢您的帮助

以下是我尝试过但没有成功的方法:

Index.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 />

    }
以下是局部视图:

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");
    }