2013-05-04 13 views
9

Ich habe Probleme mit unauffälligen Ajax, um Daten von einem Kontaktformular zu posten.Unauffällige Ajax-Form für Teilansicht

Mein Teilansicht ist wie folgt:

@model site.ViewModel.Home.ContactUsViewModel 

@using (Ajax.BeginForm("_ContactUsPartial", "Home", 
         new AjaxOptions { UpdateTargetId = "result" })) 
     { 
      <fieldset> 
       <legend>Contact Us</legend> 
       @Html.ValidationSummary(true) 
       <div id="result"></div> 
       <div class="editor-label"> 
       @Html.LabelFor(m => m.FullName) 
       @Html.ValidationMessageFor(m => m.FullName)</div> 
       <div class="editor-field">@Html.TextBoxFor(m => m.FullName)</div> 
       <!-- other fields from model --> 
       <input type="submit" value="Submit"/> 
      </fieldset> 
     } 

Mein Teilansicht auf einer anderen Seite wie folgt platziert:

@Html.Partial("_ContactUsPartial", new ContactUsViewModel()); 

My Home Controller wie folgt aus:

[HttpPost] 
public ActionResult _ContactUsPartial(ContactUsViewModel viewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     try 
     { 
      //send email 
      return Content("Thanks for your message!"); 
     } 
     catch (Exception ex) 
     { 
      return Content("Problem sending the email."); 
     } 
    } 

      return Content("oops. invalid model"); 
} 

Was Ich erwarte zu passieren, ist das, wenn ich Presse submit der Kontrolleur gebe etwas Textinhalt zurück, der gelegt wird im div mit einer id von "result".

Was passiert eigentlich, wenn ich auf "Senden" drücke, werde ich zu/Home/_ContactUsPartial weitergeleitet, wobei der Textinhalt das einzige Ding ist, das angezeigt wird.

Ich verstehe nicht, was hier vor sich geht ... und ich habe versucht, mich online nach Beispielen umzuschauen, nur um mich tiefer in dieses Loch zu graben.

Ich habe unaufdringliches Javascript in meiner Web.config aktiviert und ich habe auch einen Verweis auf jquery.unobtrusive-ajax.min.js.

In meinem Ordner Scripts ich die folgende, die relevant sein können:

  • jquery.unobtrusive-ajax.min.js
  • jquery.validate.unobtrusive.min.js
  • MicrosoftMvcAjax.js

In meinem _Layout.cshtml Tag habe ich das erklärte folgendes:

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/bootstrap.min.js")" type="text/javascript"></script> 

In meinem Global.asax.cs Application_Start Ich habe diese Zeile:

BundleConfig.RegisterBundles(BundleTable.Bundles); 

RegisterBundles wie folgt aussieht:

bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
         "~/Scripts/jquery-{version}.js")); 

bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
         "~/Scripts/jquery-ui-{version}.js")); 

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
         "~/Scripts/jquery.unobtrusive*", 
         "~/Scripts/jquery.validate*")); 

nicht sicher, welche Bündel tun und wie sie arbeiten, weil ich scheinen, um es zu haben konfiguriert, um sie über diese ScriptBundle zu bringen ... aber dann habe ich auch sie manuell im Kopf der _Layout.cshtml ....

konfiguriert Jede Idee, was ich falsch mache? Ich würde wirklich eine Hilfe mit diesem schätzen!

+0

Ok, so scheint dies ein Problem der nicht die unaufdringliche Setup-Recht. Haben Sie sichergestellt, dass die 'Microsoft.Unobtrusive' Bibliotheken aus dem Projekt entfernt wurden? Ich bin ein paar Mal auf dieses Problem gestoßen und es kam zu Problemen mit der Bibliothek und der Abhängigkeit. – Nomad101

+0

@ Nomad101 Nein, ich habe das nicht getan ... nicht 100% sicher, wie man ... – mezoid

+0

verwenden Sie Nuget mit Visual Studio? oder etwas anderes? Implementieren Sie auch eine Bündelung mit dem Projekt? – Nomad101

Antwort

14

Ich habe es endlich !!!! Nach Stunden verschwendeter Zeit !!!

Es stellte sich heraus, dass es ein Konfigurationsproblem war ... aber nicht genau das, was ich erwartet hatte.

Ich benutze jQuery 1.9.1 und was ich dachte, war die neueste Version von Microsoft.jQuery.Unobtrusive.Ajax Version 2.0.30116.0. Jedoch gab es ein Problem ... die jquery unaufdringliche ajax js-Datei, die ich noch die veraltete Live-Methode und nicht die on-Methode verwendet hatte .... Selbst ein Update-Paket hat die Datei nicht korrekt aktualisiert.

Es war nicht, bis ich diesen Beitrag ASP.NET MVC 4: cannot modify jQuery Unobtrusive Ajax sah, überprüfte ich die Datei, die ich hatte und fand, dass es eine alte Version war.

Zuerst habe ich das jQuery.Migrate nuget-Paket verwendet, um die Live-Methode wieder zu aktivieren ... aber ich fand, dass die bessere Lösung war, die vorhandene Datei zu deinstallieren oder zu löschen und nuget, um die Microsoft.jQuery.Unobtrusive.Ajax neu zu installieren Paket.

Dies behebt das Problem und jetzt funktioniert es genau wie erwartet!

+1

Genau das, was ich brauchte. Ran Install-Paket Microsoft.jQuery.Unobtrusive.Ajax in der Package Manager-Konsole, fügte die JS-Dateien zu meinem Skript-Bundle hinzu, und ich bin wieder im Geschäft. –