这是我的型号代码
public class BlobAppModel
{
[Required(ErrorMessage="Please enter the name of the image")]
[Remote("IsNameAvailable","Home",ErrorMessage="Name Already Exists")]
public string Name { set; get; }
}
在我的控制器中我有
public JsonResult IsNameAvailable(string Name)
{
bool xx= BlobManager.IsNameAvailable(Name);
if (!xx)
{
return Json("The name already exists", JsonRequestBehavior.AllowGet);
}
return Json(true, JsonRequestBehavior.AllowGet);
}
在我的数据中我有
public static bool IsNameAvailable(string Name)
{
var test = "";
using (var x = new BlobTestAppDBEntities())
{
try
{
test=x.BlobApps.Where(m => m.Name == Name).FirstOrDefault().Uri;
if (test != null)
return false;
else
return true;
}
catch (Exception)
{
return true;
}
}
}
在我看来,我也添加了脚本
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@using (Html.BeginForm("Upload", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<td> @Html.Label("Name:")
@Html.TextBoxFor(m => m.Name)
@Html.ValidationMessageFor(m=>m.Name)</td>}
但远程验证根本没有解决。我的代码有什么问题吗?
答案 0 :(得分:11)
确保您的验证方法使用[AllowAnonymous]属性修饰(也可能需要[HttpPost])。
[AllowAnonymous]
public JsonResult IsNameAvailable(string Name)
另外一个提示:使用浏览器的开发人员工具(主流浏览器中的F12按钮)查看Json请求的状态。
答案 1 :(得分:5)
您错过了视图中的jquery.unobtrusive-ajax.js
文件,请添加并再次尝试。
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
如果你没有从nuget进入
nuget link http://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/
答案 2 :(得分:2)
我知道这有点晚了,如果您使用的是Razor语法,我发现除了您所做的一切之外,您还需要:
@Scripts.Render("~/bundles/jqueryval")
答案 3 :(得分:1)
这些设置也需要进入web.config:
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>