我在我的ViewModel
中使用Remote
属性ASP.NET MVC 4应用程序。这是我简单的模型:在ASP.NET MVC中使用远程验证,无窗体查看
public class User
{
[Required(AllowEmptyStrings = false, ErrorMessage = "test test")]
public int Id { get; set; }
[DisplayName("Email")]
[Remote("RemoteValidateEmailLengthValidation", "Home")]
public string Email { get; set; }
}
和远程验证方法:
public JsonResult RemoteValidateEmailLengthValidation(string Email)
{
if (Email.Length > 20)
{
return Json("Too long email", JsonRequestBehavior.AllowGet);
}
else
{
return Json(true, JsonRequestBehavior.AllowGet);
}
}
我补充说,我需要验证在Layout
所有脚本:
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
@Scripts.Render("~/bundles/jqueryval")
写的一切,我需要在WebConfig
验证:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
并添加简单的Controller
,创建空模型并返回View
。
@model ViewModels.User
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm("PostUser", "Home", FormMethod.Post))
{
@Html.EditorForModel()
<input type="submit" />
}
,如果我在包裹和form
我模型不能正常工作如果我写它的工作原理只是我View
这样的:
@model ViewModels.User
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
@Html.EditorForModel()
所以我有疑问:
- 为什么远程验证在没有形式的情况下无法工因为在Chrome调试器中,我看到表单不提交,我只看到验证方法调用。
- 远程验证使用哪种JavaScript方法?
OnChange
?我可以在任何地方看到它吗?我可以改变它吗?
尝试取出''@当它是'using'子句 – jbutler483
的'数据-val- *内'的jQuery unobtrusve验证的必要的属性不除非在表单内生成html助手,否则该方法将永远不会被调用(这是设计)。你为什么要改变方法? –
@ jbutler483你不明白。 **它使用表单工作**。但是,如果View上没有任何表单,则不会触发。我认为这应该是脚本问题,但我不知道为什么。 –