2012-01-30 21 views
14

Próbuję przekonwertować do formy z synchroniczne asynchroniczny przy użyciu metody pomocnika Ajax.BeginForm w MVC 4.ASP.NET MVC 4 AJAX Złożenie nie działa

Moim zdaniem mam:

@{ 
     ViewBag.Title = "Users > Edit"; 
     var options = new AjaxOptions() 
          { 
           Url = Url.Action("Edit", "User"), 
           LoadingElementId = "saving", 
           LoadingElementDuration = 2000, 
           Confirm = "Are you sure you want to save this User?" 
          }; 
    } 

    <div id="saving" style="display:none; color:Red; font-weight: bold"> 
     <p>Saving...</p> 
    </div> 

    @using (Ajax.BeginForm(options)) 
    { 
     @Html.ValidationSummary(true) 
     <fieldset> 
      .... FIELDS ... 
      <p> 
       <input type="submit" value="Save" /> 
      </p> 
     </fieldset> 
    } 

Po kliknięciu przycisku przesyłania wykonywany jest pełny odświeżenie. Moja metoda działania wygląda następująco:

[HttpPost] 
public ActionResult Edit(User user) 
{ 
    if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
    } 

    return View(user); 
} 

Czy jest coś, czego mi brakuje? Czy obecna wersja MVC 4 ma kilka problemów?

W moim Web.Config mam ustawioną wartość true dla ClientValidationEnabled i UnobtrusiveJavaScriptEnabled.

Mam również te określone w moim _Layout.cshtml:

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

Ważna uwaga; jquery-1.9.0.min.js nie obsługuje Ajax.FormBegin i Ajax.ActionLink :( –

Odpowiedz

26

Czy coś mi brakuje?

Może brakuje dyskretny skrypt ajax:

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

+1 masz to: D –

+0

Tak, zauważyłeś to! Miałem validate.unobtrusive.js itp. Itd. Doh! Dzięki: D – adamwtiko

+0

uratowałeś mój dzień! –

0

Jeśli mam rozumieć poprawne, staramy się dodawać dane do sterownika, po pomyślnym trzeba przejść do strony głównej ?? jeśli nie, to możesz to wyjaśnić. tak, że będzie starał się pomóc

if (ModelState.IsValid) 
    { 
     _repository.Save(user); 
     TempData["message"] = String.Format("{0} has been saved.", user.Username); 
     return RedirectToAction("yourActionToRedirect"); // after succesfull it will go to the index view 
    } 
+0

W tym przykładzie chciałbym wrócić do bieżącego widoku z tymi samymi danymi użytkownika, np. return View (użytkownik), – adamwtiko

+0

, a następnie jest problem? czy próbowałem go debugować? czy trafia on na kontroler użytkownika? –

+0

To nie zachowuje się w sposób asynchroniczny Strona jest odsyłana z powrotem, a Request.IsAjaxRequest() zwraca wartość false w akcji edycji – adamwtiko

0

miałem ten sam rodzaj problemu ... Mam zaktualizowane wszystkie pliki js z Nuget konsoli pakietu.

tylko moje 2 centy, ale również w czasie pisania, plik jquery.unobtrusive.ajax nie zawiera połączeń z nieaktualnych funkcji jquery „.live” (=> to usunięte z wersji jquery 1.9+) jquery live

Myślę, że są jak 4 zdarzeń, że będziesz musiał zmienić z .Na, teraz działa dobrze ;-)