Ich werde dieses Problem mit der Lösung aktualisieren, ich wollte mein Problem und Lösung, wie ich es nicht auf Stackoverflow finden konnte. Wenn Sie mit der Lösung einsteigen wollen, fühlen Sie sich frei.Ajax.BeginForm nicht AJAX-Skript, fällt zurück auf Postback
Ich habe ein neu erstellt 'Empty' MVC5-Projekt mit Visual Studio 2013 erstellt. Ich brauchte ein von und wollte AJAX-Verhalten, wenn möglich. Die Verwendung von Ajax.BeginForm war in MVC3 immer einfach, also dachte ich, es wäre auch in MVC5.
Allerdings wird keine der JavaScript-Funktionen, die ich in OnBegin, OnFailure oder OnSuccess innerhalb der AjaxOptions angegeben habe, aufgerufen, wenn ich auf die Schaltfläche zum Senden klicke. Stattdessen wird ein Ajaxless-Post an den Server gesendet. Dies hat sich als wahr erwiesen, indem Request.IsAjaxRequest geprüft wurde, das false zurückgibt.
Ich habe festgestellt, dass aus irgendeinem Grund, Ajax überhaupt nicht verwendet wird. Ich habe eine Reihe von Dingen wie web.config, mein Layout Skripte überprüft usw.
Mein Layout umfasst die folgenden Skripten:
<script src="~/Scripts/jquery-1.5.1.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
Meine web.config enthält:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
</configuration>
Meine Ansicht:
@model ContactEnquiryViewModel
@{
AjaxOptions ContactOptions = new AjaxOptions()
{
OnBegin = "OnConactFormBegin()",
OnSuccess = "OnContactFormSuccess()",
OnFailure = "OnContactFormFailure()"
};
}
<div id="EnquiryFormContainer">
@using (Ajax.BeginForm("Contact", "Home", new { formName = "EnquiryForm" }, ContactOptions))
{
@Html.HiddenFor(m => m.Subject)
<div class="field">
@Html.LabelFor(m => m.FirstName)
@Html.TextBoxFor(m => m.FirstName)
<div class="validation">
@Html.ValidationMessageFor(m => m.FirstName)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.LastName)
@Html.TextBoxFor(m => m.LastName)
<div class="validation">
@Html.ValidationMessageFor(m => m.LastName)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.Email)
@Html.TextBoxFor(m => m.Email)
<div class="validation">
@Html.ValidationMessageFor(m => m.Email)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.PhoneNumber)
@Html.TextBoxFor(m => m.PhoneNumber)
<div class="validation">
@Html.ValidationMessageFor(m => m.PhoneNumber)
</div>
</div>
<div class="field">
@Html.LabelFor(m => m.Comments)
@Html.TextAreaFor(m => m.Comments)
<div class="validation">
@Html.ValidationMessageFor(m => m.Comments)
</div>
</div>
<div id="submitButtonContainer">
<input type="submit" value="Submit" name="submit" />
</div>
}
</div>
Meine Controller-Aktion (unvollendet):
Ich habe einige andere Beiträge zu diesem Problem überprüft und konnte keine Lösung finden. Obwohl einige auf die mögliche Lösung hindeuteten, wurde ich von Microsoft CDN (http://www.asp.net/ajaxlibrary/cdn.ashx) verwirrt.
auf dem Microsoft CDN sie den folgenden Abschnitt haben:
Die folgenden ASP.NET MVC JavaScript-Dateien auf dieser CDN gehostet werden:
ASP.NET MVC 5.0
http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/5.0/jquery.validate.unobtrusive.min.js
ASP.NET MVC 4.0
http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js
ASP.NET MVC 3.0
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.unobtrusive-ajax.min.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/jquery.validate.unobtrusive.min.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/3.0/MicrosoftMvcAjax.debug.js
ASP.NET MVC 2.0
http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/2.0/MicrosoftMvcAjax.debug.js
ASP.NET MVC 1.0
http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.js
http://ajax.aspnetcdn.com/ajax/mvc/1.0/MicrosoftMvcAjax.debug.js
Sie würden scheinen das einzige Skript vorschlagen, dass Sie werde Notwendigkeit für MVC5 ist jquery.validate.unobtrusive.
enthält ich denke, es ist ein Tippfehler auf der Linie 'OnBegin =„OnConactFormBegin()“;' –
Ja, das war ein Tippfehler, Methode sollte OnContactFormBegin sein. – Tentux
Wie RitchieD mit NuGet gezeigt hat, können Sie diese Probleme leicht lösen, indem Sie die entsprechenden Bibliotheken abrufen. Wenn ein Problem wie das beschriebene auftritt, liegt dies wahrscheinlich an fehlenden Bibliotheken oder inkompatiblen Bibliotheken. – Tentux