0

ルートからプルされた3つの文字列パラメーターを使用してGETアクションを介してアクセスされる基本的なMVCフォームがあります。

[HttpGet]
public ActionResult Application(string x, string y, string z)
{
    //create model, setup form, etc...

    return View(model);
}

このフォームにアクセスするためのルートは、次のように構成されています。

routes.MapRoute("Application", 
    "application/{x}/{y}/{z}",
    new
    {
        controller = "Application",
        action = "Application",
        x = "",
        y = "",
        z = ""
    }); 

また、フォームは次のように構成されています。

Html.BeginForm("Application", "Application", FormMethod.Post)

結果のフォームで[送信]をクリックするまで、これはすべて機能します。ルーティングの観点から、正しいPOSTアクションが呼び出され、モデルが正しくバインドされます。問題は、まだ必要なすべてのx / y/zルート情報を失ったことです。ルート情報を保存するにはどうすればよいですか?

私はいくつかのことを試しました:

  • フォームのコンテンツに正しく追加されているが、ポストバック時にモデルに返されない非表示フィールドのフォームにルートの詳細を追加しました
  • Html.BeginFormにRouteValueDictionaryオーバーロードを使用しようとしましたが、それを機能させる方法がわかりません。それを使用する方法とコントローラーから状態にアクセスする方法の適切な例が必要な場合があります

更新:これにより、非表示フィールドの使用に関して行われたコメントに対処するのに役立つビューサンプルが追加されます

@using (Html.BeginForm("Application", "Application", FormMethod.Post, new
                                                                        {
                                                                            autocomplete = "on", 
                                                                            id = "LoanApplication", 
                                                                            novalidate = string.Empty, 
                                                                            name = "Application"
                                                                        }))
{
    <fieldset>
        @Html.HiddenFor(m => m.x)
        @Html.HiddenFor(m => m.y)
        @Html.HiddenFor(m => m.z)
        @Html.HiddenFor(m => m.DigiCertId)
        <br />
        <input id="SubmitButton" type="submit" value="@Resources.SubmitApplicationButton" title="@Resources.SubmitApplicationButtonDescription" />
    </fieldset>
}
4

2 に答える 2

1

これらのプロパティを実際にモデルに配置してから、次のHiddenForようにそれぞれにを設定する必要があります。

@Html.HiddenFor(m => m.x)
@Html.HiddenFor(m => m.y)
@Html.HiddenFor(m => m.z)

RouteValueDictionary次に、postメソッドで(このようになっていると仮定して)、次のようにGetメソッドに渡すことができます。

[HttpPost]
public ActionResult Application(MyModel model) //whatever type your model is
{
    //do whatever your post method does before redirect
    return RedirectToAction("Application", new { x = model.x, y = model.y, z = model.z});
}
于 2012-05-01T19:52:04.737 に答える
0

mattytommoによって提案されたansに加えて。TempDataasp.netMVCでコレクションを使用することをお勧めします。これにより、セッションストレージを使用してデータが保存されますが、一時的に保存され、アクセスするとデータが削除されます。
これは特にこれらの目的の
ために存在するため、TempDataにデータを保存してから、投稿後にTempData["Values"] = new {X=x,Y=y,Z=z}; アクセスできます。TempData["Values"]

于 2012-05-01T19:57:12.960 に答える