1

MVC 3 アプリケーションがあり、カスタム検証エラーを表示しようとしています。モデルによって生成される通常の検証エラー (つまり、必須) がページに表示されます。現在、ユーザーが存在するかどうかを確認しており、存在する場合はエラーメッセージを追加しています:

if (userExists)
    ModelState.AddModelError("UserName", UserManagementResources.UserAlreadyExistsText);
return View(model);

ビューには、検証の概要と Html.ValidationMessage("UserName") がありますが、どちらもエラーを表示していません。私はこれを他のページでうまく使用しました。このページとの唯一の違いは、RequiredIf バリデータ スクリプトを使用していることです。 http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

この問題を解決する方法についてのアイデアは大歓迎です。ありがとう。


編集

リモート検証を通じて検証メッセージを返しています。ネットワークが何をしているかを見ると、エラー メッセージが返されていますが、それでもビューには表示されません。

[Required]
    [DataType(DataType.EmailAddress)]
    [Remote("IsUserAvailable", "Validation", ErrorMessage = "Ein Benutzer mit dieser Email existiert bereits.")]
    [Display(Name = Resources.EmailText, ResourceType = typeof(Resources))]
    public string Email
    {
        get { return User.Email; }
        set { User.Email = value; }
    }   

景色:

@Html.LabelFor(u => u.Email, Resources.Email + " (Login) *")
@Html.EditorFor(u => u.Email)
@Html.ValidationMessageFor(u => u.Email)
<br clear="all" />

リモート検証コントローラー:

public class ValidationController : Controller
{
    public JsonResult IsUserAvailable(string Email)
    {
        bool userExists;

        using (var userModel = new UserManagementModel())
        {
            userExists = userModel.UserExists(Email);
        }

        if(userExists)
            return Json(UserManagementResources.UserAlreadyExists, JsonRequestBehavior.AllowGet);
        else
            return Json(true, JsonRequestBehavior.AllowGet);
    }

}
4

2 に答える 2

3

これにリモート検証を使用しないのはなぜですか?

ユーザーが存在するかどうかを確認するためだけに投稿するのはなぜですか?

例:

public class RegisterModel
{
    [Required]
    [Remote("UserNameExists", "Validation", "", ErrorMessage = "Username is already taken.")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
    [Display(Name = "Username")]
    public string UserName { get; set; }
}

UserNameExists次のようなメソッドを持つ検証コントローラーを作成します

public JsonResult UserNameExists(string UserName)
{
    var user = _db.Users.Where(x => x.username.Equals(UserName));

    return user == null ?
        Json(true, JsonRequestBehavior.AllowGet) :
        Json(string.Format("{0} is not available.", register.UserName), JsonRequestBehavior.AllowGet);
}
于 2011-05-20T09:48:26.800 に答える
1

jQuery.jsのバージョンを変更するときは、validation.jsファイルも変更する必要があります。異なるバージョンは相互に互換性がなく、ファイルを混同すると、異なるブラウザで奇妙な動作が見られる場合があります。

于 2011-05-20T18:30:53.863 に答える