как сделать полный вид, используя Ajax.BeginForm - PullRequest
2 голосов
/ 03 февраля 2010

У меня есть частичное представление, которое имеет Ajax.BeginForm, с установленным UpdateTargetID. При сбое проверки в форме идентификатор цели обновления заменяется ошибками проверки, но при отсутствии ошибок проверки пользователи должны быть перенаправлены на новую страницу.

Код в моем Частичном представлении

<code><div id="div_UID">
    <% using (Ajax.BeginForm("FindChildByUID", new AjaxOptions { UpdateTargetId = "div_UID" } ))
       {%>
            <p>
                <label>UID:</label>
                <%= Html.TextBox("UID") %>
            </p>
            <input type="submit" value="Continue" />
     <% } %>
 </div>

Код в моем контроллере выглядит следующим образом

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult FindChildByUID(Student student)
    {

        Student matchingStudent = _studentService.FindChildByUID(student.UID);
        if (matchingStudent == null)
        {
            ModelState.AddModelError("UID", String.Format("No matching child found for the entered UID: {0}", student.UID));

            return PartialView();

        }
        else
        {
            // full view
            return RedirectToAction("ConfirmChildDetails", matchingStudent);
        }
    }

Итак, мне не удалось отобразить полное представление само по себе, поскольку всегда кажется, что оно полностью скрывает полное представление в div UpdateTargetID, указанном в Ajax.BeginForm.

Любые предложения о том, как я могу заставить это работать?

Спасибо

1 Ответ

1 голос
/ 03 февраля 2010

То, что делает ваш пост AJAX, - это сделать запрос и ждать ответа, содержащего html, для ввода на страницу. Конфигурация такова, что любой возвращаемый html будет внедрен в div, который вы назвали "div_UID".

Обычно я избегаю подобных сценариев и использую традиционную публикацию, если после успешного завершения POST требуется перенаправление.

Я полагаю, что вы можете сделать это, используя jQuery для отправки, а не Ajax.BeginForm (или просто установить функцию обратного вызова для вашего Ajax.BeginForm):

function SubmitForm(form) {
    $(form).ajaxSubmit({ target: "#div_to_update", success: CheckValidity });
}

function CheckValidity(responseText) {
    var value = $("#did_process_succeed").val();

    if (value == "True") {
        window.location.replace("url_of_new_action_here");
    }
}

Вам просто нужно иметь скрытое поле в вашем частичном представлении, называемое did_process_succeed, и установить значение True или False на основе некоторой логики в вашем контроллере.

Возможно, есть и другие способы. Возможно, кто-то другой зазвонит. Надеюсь, сейчас это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...