[Remote] 属性を持つモデルにフィールドがあります。そのフィールドを Hidden フォーム要素に保存し、そのフォームを送信しようとすると、送信ボタンを 2 回クリックする必要があります。また興味深いのは、2 回目にクリックしてもリモート検証が行われていないことです (Fiddler はそう言っています)。
考え?
[Remote] 属性を持つモデルにフィールドがあります。そのフィールドを Hidden フォーム要素に保存し、そのフォームを送信しようとすると、送信ボタンを 2 回クリックする必要があります。また興味深いのは、2 回目にクリックしてもリモート検証が行われていないことです (Fiddler はそう言っています)。
考え?
再現できません。非表示フィールドが Remote 属性で装飾されている場合、リモート関数が送信すると、送信ボタンを何度クリックしてもフォームを送信できませんfalse
。
例えば:
モデル:
public class MyViewModel
{
[HiddenInput(DisplayValue = false)]
[Remote("Check", "Home")]
public string Id { get; set; }
[Required]
public string Name { get; set; }
}
コントローラ:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new MyViewModel
{
Id = "1"
});
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
return View(model);
}
public ActionResult Check(string Id)
{
return Json(Id == "2", JsonRequestBehavior.AllowGet);
}
}
意見:
@model AppName.Models.MyViewModel
<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.EditorForModel()
<input type="submit" value="OK" />
}
リモート関数は常に false を返すため、このフォームは送信できません。リモート関数が true を返した場合、もちろん他の検証に合格したと仮定して、1 回のクリックでそれを送信するのに十分です。