Ich habe eine Teilansicht, von der ich einen modalen Dialog mit aktualisierten Daten anzeigen möchte. Ein Benutzer, der auf das div klickt, würde sowohl die Anzeige des modalen als auch des Ajax-Aufrufs auslösen, damit der Inhalt des Modals aktualisiert wird.asp.net mvc ajax.beginform wird als html.beginform gesendet
<div class="nMmenuItem" >
@using (Ajax.BeginForm("editItem","nMrestaurant",new { id = Model.ID },
new AjaxOptions
{
HttpMethod = "get",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "myModalDocument"
}, new { id = "ajaxEditItem" }))
{
<div data-toggle="modal" data-target="#myModal"
onclick="$('form#ajaxEditItem').submit();">
<div class="text-center">
@Model.name
</div>
</div>
}
</div>
Ich habe einen Platzhalter für den modalen innerhalb der übergeordneten Ansicht:
<div class="modal fade" id="myModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
<div class="modal-dialog" role="document" id="myModalDocument">
@Html.Partial("_editItem", new nMvMmenuItem())
</div>
</div>
Doch während die Controller-Aktion erwartet eine AjaxResquest, die Steuerung wertet Request.IsAjaxRequest() als false aus.
public async Task<ActionResult> editItem(int? id)
{
if (Request.IsAjaxRequest())
{
return PartialView("_editItem", await db.nMmenuItems.FindAsync(id));
}
return View();
}
Dies aktualisiert die gesamte Ansicht und verhindert, dass das Modal funktioniert.
ich die folgenden Skripte in der _Layout.cshtml Seite am Bündelungs:
"~/Scripts/jquery-{version}.js",
"~/Scripts/jquery-ui-{version}.js",
"~/Scripts/jquery.unobstrusive*",
"~/Scripts/jquery.validate",
"~/Scripts/bootstrap.js",
"~/Scripts/respond.js"
Vielen Dank für Ihre Hilfe!
Warum nicht einfach die Anfrage in seine eigene Methode aufteilen und die IsAjaxRequest Prüfung vollständig ablegen? –
Überprüfen Sie die Entwicklerkonsole in Ihrem Browser und prüfen Sie, ob Sie JS-Fehler haben. Ein Fehler unterbricht das Parsen anderer Skripte, und 'Ajax.BeginForm' wurde entwickelt, um auf einen standardmäßigen Nicht-Ajax-Form-Post zurückzugreifen. –
@ChrisSearles, Sie haben Recht Ich könnte die Methode auf diese Weise teilen, obwohl das das Problem hier nicht lösen wird. Ich habe es so gehalten, um die falsche Auswertung von IsAjaxRequest zu sehen, um zu überprüfen, ob der Anruf als Ajax genommen wird oder nicht. – donquijote