ルートからプルされた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>
}