2

整数の追加フィールドを使用しようとすると、検証が機能しない理由がわかりません。

これが私のコードです(コードの一部は省略されています):

モデル

    public class PersonViewModelBase
    {
    public int PersonID { get; set; }

    [Required]
    [StringLength(15, MinimumLength = 3)]
    [Remote("Checkusername", "Utilities", AdditionalFields = "PersonID")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
    public string UserName { get; set; }

    public string Password { get; set; }
    public string LastName { get; set; }

コントローラー(リモート)

public JsonResult Checkusername(string username, int PersonID)
    {
        //var user = studentRepository.GetStudents()
        //    .Where(a => a.UserName == username.Trim())
        //    .Where(b => b.PersonID != personID);            
        var user = studentRepository.GetStudents().Where(a => a.UserName == username.Trim());
        if (user.Count() > 0)
        {
            return Json(string.Format("{0} is not available.", username),
                JsonRequestBehavior.AllowGet);
        }
        else
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
    }

このリモート検証は呼び出されていません。ただし、追加フィールドを文字列に変更しようとすると、アプリケーションはリモート検証を呼び出しますが、PersonID は整数であるため「未定義」になります。

4

2 に答える 2

2

AdditionalFields オプションは文字列のみをアクションに送信するため、文字列として受け入れてから手動で整数に変換する必要があります。

public JsonResult Checkusername(string username, string PersonID)
{
    int personID = Convert.ToInt32(PersonID);

    var user = studentRepository.GetStudents()
        .Where(a => a.UserName == username.Trim())
        .Where(b => b.PersonID != personID); 

    //var user = studentRepository.GetStudents().Where(a => a.UserName == username.Trim());
    if (user.Count() > 0)
    {
       return Json(string.Format("{0} is not available.", username),
            JsonRequestBehavior.AllowGet);
    }
    else
    {
        return Json(true, JsonRequestBehavior.AllowGet);
    }
}
于 2012-08-21T20:17:21.553 に答える
0

いいえ、これはそうではありません。モデルにある追加のフィールドを取得することはできません。解決策は、あなたのケースでは value = PersonID の属性を割り当てるよりも hidden のような他のフィールドを取り、コントローラーでこの値を受け取ることです

意見

<input type = "hidden" value = "PersonID " id = hiddenID>

モデル

 [Remote("Checkusername", "Utilities", AdditionalFields = "hiddenID ")]

コントローラ

public JsonResult Checkusername(string username, string hiddenID )
{
  //your code
}
于 2013-12-03T17:35:26.877 に答える