Запретить пользователю использовать функции браузера "вперед-назад", используя MVC 3, C# и unobtrusive-ajax

Проблема: не позволяет пользователю использовать функции браузера вперед и назад.

Использование: MVC 3 C# Microsoft Visual Studio 2010 .NET Framework 4.0 unobtrusive-ajax

У меня есть работающее приложение MVC3, использующее Html.BeginForm и друзей обычным способом, с методами контроллера, принимающими различные объекты модели в качестве параметров и так далее. Все работает отлично, за исключением того, что пользователь может препятствовать ожидаемому потоку функциональных возможностей, используя возможности обратной и обратной навигации браузера. Крайне важно, чтобы это не было возможно в данном конкретном случае.

До сих пор я "решил" проблему, используя самодельный FSM (конечный автомат), который перехватывает попытки выбрать действия, несовместимые с состоянием пользователя, отправив ее обратно в начало приложения с сообщением, что она не может использовать навигацию браузера. Это действительно не очень удобно для пользователя:-)

Сейчас я пытаюсь использовать ненавязчивый Ajax для решения моей проблемы (Ajax.BeginForm). Все работает нормально, пока я не попытаюсь привести данные модели назад и вперед, как при использовании Html.BeginForm. У меня есть много существующего программного кода вокруг проверки модели и на стороне сервера с использованием view/viewmodel/CustomValidation, которое я хочу сохранить в возможном варианте решения Ajax.

Этот стартовый шлетон работает прекрасно (детали удалены):

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) который делает, как надеялись и ожидали. Я думаю, что проблема в направлении от браузера к контроллеру.

Как я могу представить такую ​​функциональность?

0 ответов

Другие вопросы по тегам