2012-04-30 45 views
1

我有以下代碼:MVC3遠程驗證,驗證火災,方法調用,但參數爲空

<td colspan="5" align="left" valign="top"> 
     <div style="position:absolute;" >@Html.TextBoxFor(a => a.Item1.Username, new { @class = "textboxLarge" }) 
     @Html.ValidationMessageFor(a => a.Item1.Username)</div> 
    </td> 

和:

public JsonResult IsUserNameAvailable(string Username) 
    { 
     var users = _userService.GetAll(); 
     var userNames = (from u in users 
         select u.Username).ToList(); 
     if (userNames.Contains(Username)) 
     { 
      var referrer = Request.UrlReferrer.AbsolutePath; 
      List<string> pagesToValidate = new List<string>() { "Registro" }; 
      var jsonRequestBehavior = JsonRequestBehavior.DenyGet; 
      foreach (string page in pagesToValidate) 
      { 
       if (referrer.Contains(page)) 
        jsonRequestBehavior = JsonRequestBehavior.AllowGet; 
      } 
      return Json("El nombre de usuario ya existe.", jsonRequestBehavior); 
     } 
     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

基本上,用戶名字段調用IsUsernameAvailable方法。驗證激發並調用方法,但變量「用戶名」每次都有一個空值,因此驗證始終爲真。 任何想法?

編輯: 這是Username字段

[global::System.Data.Linq.Mapping.ColumnAttribute(Storage="_Username", DbType="NVarChar(50) NOT NULL", CanBeNull=false)] 
    [Required(ErrorMessage="El nombre de usuario es requerido.")] 
    [Remote("IsUserNameAvailable", "Validation")] 
    public string Username 
    { 
     get 
     { 
      return this._Username; 
     } 
     set 
     { 
      if ((this._Username != value)) 
      { 
       this.OnUsernameChanging(value); 
       this.SendPropertyChanging(); 
       this._Username = value; 
       this.SendPropertyChanged("Username"); 
       this.OnUsernameChanged(); 
      } 
     } 
    } 

回答

1

你嘗試指定一個前綴:

public ActionResult IsUserNameAvailable([Bind(Prefix="Item1")] string username) 
{ 
    ... 
} 
+0

達林,感謝您的回答。但不,參數「用戶名」仍然爲空,我也嘗試用ActionResult而不是JsonResult..no骰子。 – Benjamin

+0

你的模型是怎樣的?你能提供一個簡單而簡潔的例子來重現問題嗎? –

+0

達林,我編輯了我的回覆,其中包括用戶名字段和驗證聲明。 – Benjamin