0

MVC3 リモート検証を初めて試みています。私はそれを古典的な「そのユーザー名が取られている」シナリオに使用していますが、失敗しています。Chrome 開発者で ajax 情報を確認しましたが、値を送信しているように見えますが、検証コントローラーでは文字列が null です。

ajax ヘッダーから (Google 開発者で):

UserData.login:jon

検証コントローラー:

public class ValidationController : Controller
{
    //
    // GET: /Validation/

    public JsonResult IsUsernameAvailable(string login)
    {
        var repo = new Repository();

        bool IsNameInUse = repo.CheckUserName(login);

        if (IsNameInUse == true)
        {
            return Json("The Username has been taken, please try another", JsonRequestBehavior.AllowGet);
        }

        return Json(true, JsonRequestBehavior.AllowGet);
    }

}

「CheckUserName」メソッド:

    public bool CheckUserName(string Username)
    {
        var existingUser = (from u in db.useraccount
                           where u.login.Equals(Username)
                           select u).SingleOrDefault();

        if (existingUser == null)
        {
            return false;
        }
        else
        {
            return true;
        }
    }

ユーザーモデルには Remote 属性があります。

    [Remote("IsUserNameAvailable", "Validation")]
    [Display(Name = "Choose a Login Name")]
    [StringLength(40)]
    [Required]
    public string login { get; set; }

検証コントローラーでの手動バインディングについていくつか読んだことがありますが、これを構築するために使用する例ではそれについて何も言及されていないため、手動バインディングは私が間違ったことに対するパッチにすぎないと想定しています。他に必要なデータがあれば教えてください。

4

1 に答える 1

1

問題が見つかりました。送信される ajax に見られるように、フィールドは UserData.login を送信していますが、検証コントローラーのパラメーターは単に login です。それらは一致する必要があるため、それは解決されます。

ビューモデルを少し変更する必要があると思います。

于 2013-04-11T23:14:48.643 に答える