web-dev-qa-db-ja.com

ASP.Net MVC 3でのリモート検証:アクションメソッドでAdditionalFieldsを使用する方法

新しいASP.Net MVC 3 RemoteAttributeを使用して、単一のパラメーターを持つアクションメソッドにリモート呼び出しを送信しました。ここで、AdditionalFieldsプロパティを使用して2番目のパラメーターを渡します。

[Remote("IsEmailAvailable", "Users", AdditionalFields = "InitialEmail")]

ここで、IntialEmailはビューの非表示フィールドです。アクションは次のようになります。

public JsonResult IsEmailAvailable(
            string email,
            string InitialEmail)
{
//etc.
}

ビューがレンダリングされると、非表示フィールドが入力されますが、アクションメソッドがリモートでトリガーされると、値は空の文字列になります。

他の場所では大文字と小文字の区別が問題になる可能性があるので、両方のパラメーターでアクションメソッドの大文字と小文字が同じであることを確認しました。

他の提案はありますか?このAdditionalFieldsは、以前はフィールドと呼ばれていました。

おかげで、

すてきな

30
beaudetious

奇妙な。わたしにはできる:

モデル:

public class MyViewModel
{
    [Required]
    [Remote("IsEmailAvailable", "Home", AdditionalFields = "InitialEmail")]
    public string Email { get; set; }
}

コントローラ:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View(new MyViewModel());
    }

    [HttpPost]
    public ActionResult Index(MyViewModel model)
    {
        return View(model);
    }

    public ActionResult IsEmailAvailable(string email, string initialEmail)
    {
        return Json(false, JsonRequestBehavior.AllowGet);
    }
}

見る:

@model AppName.Models.MyViewModel
@{
    ViewBag.Title = "Home Page";
}
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script>
@using (Html.BeginForm())
{
    @Html.TextBoxFor(x => x.Email)
    @Html.ValidationMessageFor(x => x.Email)
    <input type="hidden" name="InitialEmail" value="[email protected]" />
    <input type="submit" value="OK" />
}

IIRC RTMで修正されたこのリモート検証により、ASP.NET MVC 3 RC2にいくつかのバグがありました。

59
Darin Dimitrov

非表示フィールドは、検証するフィールドと同じフォーム内にある必要があります(Darinの例のように)。そうでない場合、非表示フィールドの値は、検証アクションメソッド "public ActionResult IsEmailAvailable(string email、string initialEmail)にパラメーターとして送信されません。 )」

2
Christian

関数IsEmailAvailable(string email、string initialEmail)param emailは、EmailとしてプロパティのEmailとまったく同じにする必要があります。

0
Ericyu67