4

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

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

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

次の 2 つの条件でメッセージを表示する必要があります。

  1. エラーメッセージ「ユーザー名が利用できません」を表示 - 失敗条件
  2. 成功メッセージ「利用可能なユーザー名」を表示 - 成功条件

次のような問題なく、失敗条件のメッセージを表示できます。

return Json("Username not available", JsonRequestBehavior.AllowGet);

しかし、成功条件の場合、次のように (カスタム メッセージではなく) 応答で true を送信する必要があります。

 return Json(true, JsonRequestBehavior.AllowGet);

リモート検証の成功条件のカスタム メッセージを表示するにはどうすればよいですか?

4

2 に答える 2

2

このリンクを参照してください... ここ

これを実現する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>
}

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

$(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-23T11:29:52.073 に答える
0

(Json にシリアル化される) オブジェクトを返すことができますか?

そのような:

var answer = new { success = true, message = "Username available" };
return Json(answer, JsonRequestBehavior.AllowGet);

次に、これをビューで解析できます。

また、この方法でユーザー名を使用できない場合は、提案されたユーザー名をいくつか追加することもできます。

例えば

// pretend they chose "dave"
List<string> alternativeNames = new List<string>() { "dave1", "dave2" };
var answer = new { success = false, message = "Username not available", alternatives = alternativeNames };
return Json(answer, JsonRequestBehavior.AllowGet);
于 2011-06-21T09:24:36.993 に答える