2 Stimmen

wie man eine vollständige Ansicht mit Ajax.BeginForm rendert

Ich habe eine partielle Ansicht, die eine Ajax.BeginForm, mit einer UpdateTargetID festgelegt hat. Wenn die Validierung auf dem Formular fehlschlägt, wird die Update-Target-ID durch die Validierungsfehler ersetzt, aber wenn es keine Validierungsfehler gibt, sollten Benutzer auf eine neue Seite umgeleitet werden.

Der Code in meiner partiellen Ansicht lautet

<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>
</pre>

Der Code in meinem Controller sieht wie folgt aus

    [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);
        }
    }

Also, für ich habe nicht erfolgreich gewesen, um die vollständige Ansicht auf es selbst anzuzeigen, da es immer scheint, die vollständige Ansicht in der UpdateTargetID divfied in der Ajax.BeginForm dipslay.

Irgendwelche Vorschläge, wie ich das zum Laufen bringen kann?

Merci

1voto

Chris F Punkte 2786

Ihr AJAX-Beitrag stellt eine Anfrage und wartet auf eine Antwort, die HTML zur Eingabe in die Seite enthält. Die Konfiguration ist so, dass die zurückgegebene HTML-Datei in das Div, das Sie "div_UID" genannt haben, eingefügt wird.

In der Regel vermeide ich solche Szenarien und verwende herkömmliche Postings, wenn eine Weiterleitung nach erfolgreichem Abschluss der POST erforderlich ist.

Ich kann mir vorstellen, dass Sie es so machen könnten, indem Sie jQuery verwenden, um das Formular anstelle von Ajax.BeginForm zu übermitteln (oder einfach eine Callback-Funktion für Ihr Ajax.BeginForm festlegen):

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");
    }
}

Sie müssen nur ein verstecktes Feld in Ihrer partiellen Ansicht mit dem Namen "did_process_succeed" haben und den Wert True oder False auf der Grundlage einer Logik in Ihrem Controller setzen.

Wahrscheinlich gibt es auch noch andere Möglichkeiten. Vielleicht meldet sich jemand anderes. Ich hoffe, dass dies für jetzt hilft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X