远程属性验证未在 Asp.Net MVC 中触发

Posted

技术标签:

【中文标题】远程属性验证未在 Asp.Net MVC 中触发【英文标题】:Remote Attribute Validation not firing in Asp.Net MVC 【发布时间】:2013-11-09 22:49:00 【问题描述】:

这是我的模型代码

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>

但是远程验证根本没有触发..我的代码有什么问题吗?

【问题讨论】:

类似问题是另一个页面:***.com/a/37366502/4146766 【参考方案1】:

确保您的验证方法带有 [AllowAnonymous] 属性(也可能需要 [HttpPost])。

[AllowAnonymous]
public JsonResult IsNameAvailable(string Name)

还有一个小技巧:使用浏览器的开发者工具(主流浏览器的 F12 按钮)查看 Json 请求的状态。

【讨论】:

谢谢,它对我有用,我只是在它缺少的操作顶部添加 [AllowAnonymous] 属性。 非常感谢。它对我有用。我忘记了我在控制器级别添加了 [Authorize] 并且我在注册页面上为 [Remote] 访问它应该匿名访问。节省了我很多时间。再次感谢:)【参考方案2】:

您的视图中缺少jquery.unobtrusive-ajax.js 文件,请添加该文件并重试。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

如果你没有从 nuget 获取它

nuget 链接http://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/

【讨论】:

您是否在控制台上看到任何错误?并且请删除最小文件并尝试使用实际文件。很容易调试。 不,我没有收到任何错误..我现在什至添加了实际文件..但仍然没有变化 尝试在jquery.validate.js 之前添加jquery.unobtrusive-ajax.js 清除缓存,然后重试。 即使这样做了,但仍然没有触发:( 当您更改包含的 javascript 时,有时我发现需要在我的网络浏览器中清除缓存。另外,使用浏览器的开发工具(我使用 chrome)并查看在您分配给它的输入元素上的远程验证属性上生成的 url。确保相对地址正确。【参考方案3】:

我知道这有点晚了,如果你使用的是 Razor 语法,我发现除了你所做的一切之外,你还需要:

@Scripts.Render("~/bundles/jqueryval")

【讨论】:

这正是我所缺少的。谢谢!【参考方案4】:

这些设置也需要进入 web.config:

<appSettings>
    <add key="ClientValidationEnabled" value="true" />
    <add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>

【讨论】:

以上是关于远程属性验证未在 Asp.Net MVC 中触发的主要内容,如果未能解决你的问题,请参考以下文章

在ASP.NET MVC4中如何执行远程验证?

自定义属性的 ASP.NET MVC 客户端验证

当验证错误消息未在 ASP 页中触发时隐藏不必要的空间

Asp.net MVC的验证

远程验证在 ASP.NET MVC 5 中不起作用

ASP.Net MVC 5 Sending Email 错误:根据验证程序,远程证书无效