2010-12-09 6 views
0

Ich verstehe nicht einmal Tastemvc3 Ajax Einreichung auf der Controller-Seite. Wie?

geklickt

Wie Ajax-Aufruf auf der Serverseite zu handhaben, so dass meine DataAnnotation Arbeit und ich Erfolgs- oder Fehlermeldung.

<script src="../../../../Content/Scripts/jquery-1.4.4-vsdoc.js" type="text/javascript"></script 
<script type="text/javascript"> 

    $(function() 
    { 
     $("#createButton").click(function() 
     { 
      var profile = { 
       FirstName: $("#FirstName").val(), 
       LastName: $("#LastName").val(), 
       Email: $("#Email").val() 
      }; 

       $.ajax({ 
        url: "/Profile/Create", 
        type: "Post", 
        data: JSON.stringyfy(profile), 
        dataType: "json", 
        contentType: "Application/json; charset=utf-8", 
        success: function() { 
         $("#message").html("Profile Saved."); 
        }, 
        error: function() { 
         $("#message").html("Error occured"); 
        } 
       }); 

      return false; 
     }); 
    }); 

</script> 

//Server side 
public ActionResult Create(string confirmButton, CreateViewModel userVm) 
{ 
    if (confirmButton != "Create Profile") return RedirectToAction("Index"); 

    if (!ModelState.IsValid) 
     return View("Create", userVm); 

    User user = new User(); 
    Mapper.Map(userVm, user); 

    _repository.Create(user); 

    return RedirectToAction("Details", new { id = user.UserId }); 
} 

Antwort

0

Wenn ich mich richtig erinnere (es ist schon eine Weile her, seit ich mit jquery gespielt), der Erfolg und die Fehler zeigen den Rückgabewert der tatsächlichen HTTP-Anforderung selbst. Zum Beispiel, wenn Sie eine 404 treffen, erhalten Sie eine Fehlermeldung.

Unabhängig davon, ob ein Profil erfolgreich über Ihre Seitenlogik erstellt wurde oder nicht, wurde die Erfolgsmeldung getroffen, wenn die Anfrage selbst verarbeitet wurde. Sie müssen den Rückgabewert an dieser Stelle selbst interpretieren.

+0

Ich verstehe. Aber wie in dem obigen Controller-Code, was ich nach der Validierung zurückschicke. Anstelle von return View ("Create", userVm); Was soll ich zurückgeben? Das ist das Problem, vor dem ich stehe. – Pirzada

0

Versuchen Sie, ein JsorResult anstelle der Umleitung zu einer Ansicht zurückzugeben, dann clientseitig, analysieren Sie das JsonResult und handeln Sie entsprechend.

[HttpPost] 
public JsonResult DeleteDoc(int Id, int DocCode, SomeObject Model) 
{  
try 
{ 
    // Check annotations stuffs 
    if (!Model.IsValid) { 
    var jsonDataM = new { ExitCode= -100, message = "Invalid Model" }; 
    return Json(jsonDataM, JsonRequestBehavior.DenyGet); 
    } 
    // My logic in here 
    var jsonData = new { ExitCode= 0, message = "Everything's ok" }; 
    return Json(jsonData, JsonRequestBehavior.DenyGet); 
} 
catch (Exception e) 
{ 
    var jsonData2 = new { ExitCode= -1, message = "Everything's Ko" + e.Message }; 
    return Json(jsonDat2a, JsonRequestBehavior.DenyGet); 
} 
} 

im OnSuccess Rückruf Sie dies mit beziehen:

<script type="text/javascript"> 
function MyAjaxCallBack(context) { 
    var code = context.ExitCode; 
    if (code != 0) { 
    alert (context.message); 
    } 
} 
</script> 

Bitte beachten Sie, dass dieser Code vereinfacht. Wenn ich das IsValid on Model verwalte, iteriere ich del ModelState, um eine Nachricht zu erstellen.

Verwandte Themen