問題: ユーザーがブラウザの前後の機能を使用できないようにします。
使用: MVC 3 C# Microsoft Visual Studio 2010 .net フレームワーク 4.0 unobtrusive-ajax
私は Html.BeginForm と友人を使用して、さまざまなモデルオブジェクトをパラメーターとして受け取るコントローラーメソッドなど、通常の方法で動作する MVC3 アプリケーションを持っています。ユーザーがブラウザの前後のナビゲーション機能を使用して、期待される機能フローを妨げることができる場合を除いて、すべて正常に機能します。この特定のアプリケーションでは、これが可能であってはならないことが最も重要です。
これまでのところ、自家製の FSM (Finite State Machine) を使用して、ユーザーの状態と互換性のないアクションを選択しようとする試みを傍受することで、問題を「解決」しました。ブラウザのナビゲーションを使用できません。これは本当にユーザーフレンドリーではありません:-)
私は今、控えめな ajax を使用して問題を解決しようとしています (Ajax.BeginForm)。Html.BeginForm を使用する場合のように、モデル データを前後に移動しようとするまで、すべて正常に動作します。ビュー/ビューモデル/CustomValidation を使用したモデルとサーバー側の検証に関する既存のプログラム コードが多数あり、可能な Ajax ソリューション バリアントで保持したいと考えています。
この最初の scheleton は美しく機能します (詳細は削除されています)。
CommandDispatcher.cshtml ビュー:
@using (Ajax.BeginForm("CommandDispatcher", "Adm", new AjaxOptions{ UpdateTargetId = "result" }))
{
<div id="result">
@Html.Partial("SomeAction001") @* Only run the first time *@
</div>
}
SomeAction001.cshtml 部分ビュー:
<input type="submit" id="SomeAction001" name="SomeAction001" value="SomeAction001" />
SomeAction002.cshtml 部分ビュー:
<input type="submit" id="SomeAction002" name="SomeAction002" value="SomeAction002" />
コントローラ:
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult StartCommandDispatcher()
{
return View("CommandDispatcher");
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult CommandDispatcher()
{
string action = translateToAction(Request);
return findPartialView(action);
}
private static string translateToAction(HttpRequestBase request)
{
string action = <find out which push button has been pressed and translate that to a known action>;
return action;
}
private ActionResult findPartialView(string action)
{
string partialViewName = <look up a dictionary or something>;
ActionResult ar = PartialView(partialViewName);
return ar;
}
このシナリオをその中のデータでも機能させるには :-)、モデルのレンダリングと検証機能を追加する必要があります。
モデルをブラウザーに送信することは問題ありません。これは、次の部分ビューへの追加によって例示されます。@Html.Raw((model as MyViewModel).Field1)
これは、期待どおりにレンダリングされます。私が思う問題は、ブラウザからコントローラへの方向です。
そのような機能を導入するにはどうすればよいですか?