2010-12-09 63 views
0

一次按鈕點擊在控制器端提交mvc3 ajax。怎麼樣?

如何處理在服務器端Ajax調用,這樣我DataAnnotation工作 ,我得到成功或錯誤信息,我不明白。

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

回答

0

如果我沒記錯的話(它已經有一段時間,因爲我用jQuery飾),成功和錯誤指示的實際HTTP請求本身的返回值。例如,如果你點擊404,你會收到一條錯誤消息。

不管是否個人資料是通過你的頁面邏輯創建成功後,如果請求本身處理,那麼成功的消息將被打 - 你需要自己解釋返回值,在這一點上。

+0

我明白了。但是就像在上面的控制器代碼中,我一旦驗證失敗就返回。而不是返回視圖(「創建」,userVm);我應該返回什麼。那就是我面臨的問題。 – Pirzada 2010-12-09 07:52:43

0

嘗試在代替重定向到一個視圖的返回JsorResult,然後客戶端,解析JsonResult並據此採取行動。

[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); 
} 
} 
中的onSuccess回調,你可以參考這個與

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

請注意,此代碼簡化。在Model上管理IsValid時,我通常迭代del ModelState以建立一條消息。