2

ソリューションでユーザーを追加または編集するときに、ユーザー名がまだ使用されていないことを確認したいと思います。

リモート検証で行うことは次のとおりです。

ビューモデル:

    [Required, Remote("UserNameAlreadyExists", "User", Error="Already exists!")]
    public string UserName { get; set; }

コントローラ:

    public ActionResult UserNameAlreadyExists(string userName)
    {
        var user = _requestServiceClient.GetUserFromUserName(userName);
        return Json(user == null, JsonRequestBehavior.AllowGet);
    }

それは作成のためにかなりうまく機能します。ただし、編集されたユーザー自身のユーザー名が既に存在するため、エディションでは機能しません。分かりますか?

解決策は、UserName と UserID に基づいて DB をチェックインすることです。したがって、ユーザーを編集する場合、ユーザー名がまだ存在しないことを確認できます (パラメーターとして渡されたユーザー ID を除く)。それは良い代替手段ですか?リモート検証属性でこのユーザー ID を渡す方法は?

ありがとう。

4

1 に答える 1

6

ユーザーが作成後にユーザー名を変更できない場合は、UserName検証なしで表示するだけの編集用に別のビュー モデルを使用します。

それ以外の場合は、AdditinalFieldsプロパティを使用して追加データをバリデーターに渡すことができます。

public class UserModel
{
    public int Id{ get; set; }

    [Required, Remote("UserNameAlreadyExists", "User", AdditionalFields = "Id")]
    public string UserName { get; set; }
}

public ActionResult UserNameAlreadyExists(string userName, int id)
{
    var user = _requestServiceClient.GetUserFromUserNameAndId(userName, id);
    return Json(user == null, JsonRequestBehavior.AllowGet);
}

また、例にIdプロパティを含める必要があります。form

@using (Html.BeginForm())
{
    @Html.HiddenFor(m => m.Id)
    @Html.TextBoxFor(m => m.UserName)
    @Html.ValidationMessageFor(x => x.UserName)
    <input type="submit" value="Save" />
}
于 2012-04-14T14:38:08.490 に答える