2013-05-04 13 views
9

Mam problem z użyciem dyskretnego ajaxu do publikowania danych z formularza kontaktowego.Dyskretny formularz Ajax do częściowego wyświetlenia

Moja Częściowy widok jest tak:

@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> 
     } 

Moja Częściowy widok jest umieszczony na innej stronie tak:

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

My Home Controller tak:

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

Co Spodziewam się, że to się stanie, gdy po naciśnięciu przycisku submit kontroler zwróci pewną zawartość tekstową, która zostanie umieszczona w div z identyfikatorem "wyniku".

To, co się właściwie dzieje, to po naciśnięciu przycisku "submit", następuje przekierowanie do/Home/_ContactUsPartial z treścią tekstową jako jedyną wyświetlaną.

Nie rozumiem, co się tutaj dzieje ... i próbowałem rozejrzeć się po przykładach online tylko po to, aby znaleźć się głębiej w tej dziurze.

Mam dyskretny javascript włączony w moim Web.config i mam również odniesienie do jquery.unobtrusive-ajax.min.js.

W moim folderze Scripts Mam następujący które mogą być istotne:

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

W moim tagu _Layout.cshtml mam następujący oświadczył:

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

W moim Global.asax.cs Application_Start mam ten wiersz:

BundleConfig.RegisterBundles(BundleTable.Bundles); 

RegisterBundles wygląda tak:

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

nie wiesz, co robić i wiązki, jak one działają, ponieważ wydaje mi się, żeby go mieć skonfigurowane, aby wprowadzić je za pośrednictwem tego składnika ScriptBundle ... ale potem mam je również skonfigurowane ręcznie w nagłówku _Layout.cshtml ...

Jakieś pojęcie, co robię źle? Byłbym wdzięczny za pomoc!

+0

Okej, więc wydaje się, że problem polega na tym, że nie ma niepoprawnej konfiguracji. Czy upewniłeś się, że 'Microsoft.Unobtrusive'libraries zostały usunięte z projektu? Kilka razy natknąłem się na ten problem, który zakończył się problemami związanymi z biblioteką i zależnościami. – Nomad101

+0

@ Nomad101 Nie, nie zrobiłem tego ... nie jestem w 100% pewien jak to zrobić ... – mezoid

+0

czy używasz Nuget z visual studio? albo coś innego? Czy wdrażasz również sprzedaż wiązaną z projektem? – Nomad101

Odpowiedz

14

W końcu mam to !!!! Po godzinach zmarnowanego czasu !!!

Okazało się, że to był problem z konfiguracją ... ale nie do końca tego, czego się spodziewałem.

Używam jQuery 1.9.1 i co myślałem, że jest najnowszą wersją Microsoft.jQuery.Unobtrusive.Ajax wersja 2.0.30116.0. Wystąpił jednak problem ... jQuery dyskretny plik ajax js, w którym wciąż korzystałem z nieaktualnej metody live, a nie z metody on .... Nawet wykonanie aktualizacji nie zaktualizowało poprawnie pliku.

Dopiero gdy zobaczyłem ten wpis ASP.NET MVC 4: cannot modify jQuery Unobtrusive Ajax, sprawdziłem plik, który posiadałem i stwierdziłem, że jest to stara wersja.

Najpierw użyłem pakietu jQuery.Migrate nuget, aby ponownie włączyć metodę live ... ale stwierdziłem, że lepszym rozwiązaniem było odinstalowanie lub usunięcie istniejącego pliku i użycie nuget do ponownego zainstalowania Microsoft.jQuery.Unobtrusive.Ajax pakiet.

Naprawiono problem i teraz działa dokładnie zgodnie z oczekiwaniami!

+1

Dokładnie to, czego potrzebowałem. Ran Install-Package Microsoft.jQuery.Unobtrusive.Ajax w konsoli Package Manager, dodał pliki JS do mojego pakietu skryptów i wróciłem do biznesu. –

Powiązane problemy