2011-06-21 147 views
4

我正在使用遠程驗證在註冊期間檢查我的asp.net mvc 3應用程序(C#)的用戶名是否可用。顯示遠程驗證成功響應的自定義消息

我使用MVC遠程屬性驗證爲:

[Remote("IsUserNameAvailable", "User")] 
public string UserName { get; set; } 

我需要表現出兩個條件的消息:

  1. 顯示錯誤消息「用戶名不可用」 - 失效狀態
  2. 顯示成功消息「用戶名可用」 - 成功條件

我能顯示故障情況的消息,而無需像任何問題:

return Json("Username not available", JsonRequestBehavior.AllowGet); 

但成功的條件,我需要響應(不與自定義消息)發送正確的:

return Json(true, JsonRequestBehavior.AllowGet); 

如何顯示遠程驗證成功條件的自定義消息?

回答

0

你能夠返回一個對象(它將被序列化爲Json)嗎?

如:

var answer = new { success = true, message = "Username available" }; 
return Json(answer, JsonRequestBehavior.AllowGet); 

然後你就可以在視圖中解析此。

此外,如果你這樣做,但用戶名不可用,你也可以添加一些建議的用戶名。

例如

// pretend they chose "dave" 
List<string> alternativeNames = new List<string>() { "dave1", "dave2" }; 
var answer = new { success = false, message = "Username not available", alternatives = alternativeNames }; 
return Json(answer, JsonRequestBehavior.AllowGet); 
+0

我如何解析這個遠程驗證?遠程驗證位於jquery.validate.min.js中。我如何重寫那部分? – Prasad

2

看到這個鏈接...以實現 here

一種方法是從驗證動作添加自定義HTTP響應頭:

public ActionResult IsUserNameAvailable(string username) 
{ 
if (IsValid(username)) 
{ 
    // add the id that you want to communicate to the client 
    // in case of validation success as a custom HTTP header 
    Response.AddHeader("X-ID", "123"); 
    return Json(true, JsonRequestBehavior.AllowGet); 
} 

return Json("The username is invalid", JsonRequestBehavior.AllowGet); 
} 

現在的客戶端,我們明顯上有一個標準格式和用戶名輸入欄:

@model MyViewModel 
@using (Html.BeginForm()) 
{ 
    @Html.EditorFor(x => x.UserName) 
    @Html.ValidationMessageFor(x => x.UserName) 
    <button type="submit">OK</button> 
} 

現在拼圖的最後一塊是一個完整的處理程序連接到遠程規則在用戶名字段:

$(function() { 
$('#UserName').rules().remote.complete = function (xhr) { 
    if (xhr.status == 200 && xhr.responseText === 'true') { 
     // validation succeeded => we fetch the id that 
     // was sent from the server 
     var id = xhr.getResponseHeader('X-ID'); 

     // and of course we do something useful with this id 
     alert(id); 
    } 
}; 
}); 
相關問題