10

リモート検証を使用して、asp.net mvc 3 アプリケーション (C#) の登録中にユーザー名が使用可能かどうかを確認しています。

MVC リモート属性検証を次のように使用しています。

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

これを返すと:

return Json(true, JsonRequestBehavior.AllowGet);

次に、アクションから返される非表示フィールドの値を設定したり、緑色のアイコン画像を表示したりするようなことを実行したいと思います。そして、IDもtrueで返したいです。

このことを達成する方法は?

要するに、私は成功のために何かをしたいのです。

4

1 に答える 1

23

これを実現する1つの方法は、検証アクションからカスタム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>
}

そして今、パズルの最後のピースは、ユーザー名フィールドcompleteのルールにハンドラーをアタッチすることです。remote

$(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);
        }
    };
});
于 2012-05-22T16:59:25.337 に答える