4

MVC 4アプリケーションには、インデックスビューがあります。このビューには、部分ビューがレンダリングされる2つのdivタグがあります。クリックすると、jQueryを使用してこれら2つのdivを切り替える2つのボタンがあります。部分ビューは、それぞれのモデルで強く型付けされます。

質問:

モデルを部分ビューに渡すにはどうすればよいですか?パーシャルビューからのPOSTリクエストを処理するにはどうすればよいですか?POSTアクションメソッドでModelStateが無効な場合、ModelStaeを認識しているビューを再レンダリングするにはどうすればよいですか?

部分ビューはこのシナリオで進む方法ですか?MVC 4でこれを達成するためのより良い方法はありますか?

どんな助けでも大歓迎です。

これが私が成功せずに試したことです:

Index.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")たが、このアクションでは、このビューのモデルのインスタンスを含む部分ビューが返されます。

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

インデックスアクションメソッドがモデルインスタンスを渡すようにレンダリングする「通常の」場合のように、コントローラーアクションメソッド、インデックスビュー、および部分ビューの間の相互作用を処理する方法。次に、インデックスPOSTアクションメソッドで検証が失敗した場合、インデックスビューを呼び出してフォームを再表示し、無効なモデルを渡します。

ありがとうございました

4

1 に答える 1

3

モデルをパーシャルに渡すには、@ Html.Partial( "SomeFile"、SomeModel);を使用してモデルを渡します。

複数のフォームがある場合は、それぞれに異なるコントローラーアクションを与えることをお勧めします。@ Html.BeginFormを使用して、コントローラーとアクションのパラメーターを指定できます。

パーシャルは、HTMLを整理する方法にすぎません。ページがレンダリングされるとコンテキストがなくなるので、あまり気にする必要はありません。

ビューがモデル状態のエラーについて知るためには、モデルを渡す必要があります。インデックスにリダイレクトする代わりに、インデックスビューを返し、モデルを2番目のパラメータとして渡します。

于 2013-01-16T14:38:07.070 に答える