Ich habe ein Formular in einer Teilansicht, das Formular feuert nicht die Client-Seite Javascript-Methode in den AjaxOptions angegeben und ich kann nicht sehen, warum.Ajax.BeginForm unaufdringlich Ajax nicht feuern
Ich habe folgendes Formular.
@model QuickContact
<div id="quickContactForm" class="row">
<div class="col-md-4 push-md-9 box">
<h4>Quick Contact</h4>
<div id="contactForm"></div>
<p>
For an instant callback simply fill in the form below.
</p>
@using (Ajax.BeginForm(
"QuickContact",
"Contact",
new AjaxOptions
{
OnFailure = "contact.onFailure",
OnBegin = "contatc.onBegin",
OnComplete = "contact.onComplete",
OnSuccess = "contact.onSuccess",
UpdateTargetId = "quickContactForm"
}))
{
@Html.AntiForgeryToken()
<div class="form-group">
@Html.EditorFor(x => x.Name, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your name..." } })
@Html.ValidationMessageFor(x => x.Name, null, new { @class = "text-danger" })
@Html.EditorFor(x => x.Telephone, new { htmlAttributes = new { @class = "form-control", placeholder = "Enter your telephone..." } })
@Html.ValidationMessageFor(x => x.Telephone, null, new { @class = "text-danger" })
<input type="submit" class="btn btn-block btn-primary" value="Submit" />
</div>
}
<div id="loading" class="row">
<div class="col-md-12">
<p class="text-lg-center">
<i class="fa fa-spinner" aria-hidden="true"></i>
</p>
</div>
</div>
</div>
</div>
mit meiner js ist;
var contact = {
onBegin: function() {
console.log("loading...");
$('#loading').show();
},
onComplete: function() {
console.log("complete");
$("#loading").hide();
},
onFailure: function(ajaxContext) {
console.log("error occured.");
var response = ajaxContext.responseText;
alert("Error Code [" + ajaxContext.ErrorCode + "] " + response);
$('#loading').hide();
},
onSuccess: function(result) {
// enable unobtrusive validation for the contents
// that was injected into the <div id="result"></div> node
console.log("ajax success func");
$.validator.unobtrusive.parse($(result));
}
};
Ich habe auch installiert das nuget Paket für eine unauffällige-Ajax
mitInstall-Package Microsoft.jQuery.Unobtrusive.Ajax
und ich habe in meinem web.config
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
schließlich habe ich die unaufdringliche Ajax-Verbindung zu meiner Bündelung hinzugefügt;
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive-ajax.js",
"~/Scripts/jquery.validate*",
"~/Scripts/tether/tether.js"));
ich keine Konsole Fehler bei allen außer dem POST die Controller-Aktion trifft und keiner meiner Ajax-Konsolenprotokolle registriert sind.
Irgendwelche Ideen, was ich hier falsch mache?
Hallo Shyju, das war nur ein Tippfehler in meiner Frage. Wie ich bereits erwähnt habe, scheint alles richtig zu sein (ich teste es übrigens in Chrome und benutze Bootstrap v4). Es gibt auch keine Fehler in der Konsole, aber ist eine Bestellung für die js-Dateien erforderlich? –
Wie ich in der Antwort erwähnt habe, brauchst du auch 'jquery.validate.unobtrusive.js'. Also mit all diesen Code, wenn Sie auf "Senden" klicken, was passiert? Siehst du die console.log Nachrichten in deiner Browser Konsole? Irgendwelche Fehler beim Absenden wird geklickt? Der obige Code hat total für mich funktioniert – Shyju