ASP.NET MVC5中未执行远程验证

时间:2016-06-20 16:27:37

标签: asp.net asp.net-mvc validation data-annotations remote-validation

我正在开发一个ASP.NET MVC Web应用程序。我正在对控制器中的一个视图模型进行远程验证。但它没有用。甚至没有执行控制器中的远程验证方法。我在线搜索解决方案,但无法解决我的问题。我发现了这些(Remote Attribue Validation not firing in Asp.Net MVCASP.NET MVC RemoteAttribute validation not working - Action not being executed),我试了一下。请参阅下面的方案。

  

这是我在Name属性

上应用的模型类远程验证
public class CreateCategoryVM
    {
        public int Id { get; set; }
        [Required]
        [MaxLength(50)]
        [Remote("IsNameUnique","Category",ErrorMessage= "Name must be unique")]
        public string Name { get; set; }
        [MaxLength(55)]
        public string MmName { get; set; }
        public IEnumerable<SelectListItem> CategorySelectItems { get; set; }
        public int SelectedCategoryId { get; set; }
    }

我的远程验证方法和操作方法在同一个控制器中。

  

这是我的控制器中的创建操作方法和验证方法

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create(CreateCategoryVM model)
        {
            if(ModelState.IsValid)
            {
                try
                {
                    Category category = new Category
                    {
                        Name = model.Name,
                        MmName = model.MmName
                    };
                    categoryRepo.Create(category);
                    return RedirectToAction("Create");
                }
                catch
                {
                    return new HttpStatusCodeResult(HttpStatusCode.InternalServerError);
                }
            }
            model.CategorySelectItems = categoryRepo.CategorySelectItems(model.SelectedCategoryId, "Select category", Thread.CurrentThread.CurrentCulture.Name);
            return View(model);
        }

        public JsonResult IsNameUnique(string Name,int Id)
        {
            if(string.IsNullOrEmpty(Name))
            {
                return Json(true,JsonRequestBehavior.AllowGet);
            }
            else
            {
                var category = categoryRepo.GetCategoryByName(Name);
                if(category)
                {
                    return Json(false, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json(true, JsonRequestBehavior.AllowGet);
                }
            }
        }
  

在web.config中也启用了必需的javascript设置

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

但是当我提交表单时,不执行IsNameUnique操作以进行远程验证。一切都运作良好,除了它。如果传递验证,也会创建新类别。所需的验证也有效。仅执行远程验证方法。我用断点测试了。那么请问我的代码有什么问题?我该怎么办呢?

  

这是编辑过的部分

我添加了jquery.validate.js和jquery.validate.unobtrusive.js。然后我运行并提交表格。现在它甚至没有提交。我检查javascript代码,我不知道如何解决它。我设定了突破点。单击“提交”按钮时不会运行。

  

这是浏览器的javascript控制台

enter image description here

  

这是浏览器的调试器

enter image description here

  

这是我的观点

@using(Html.BeginForm())
{
    @Html.AntiForgeryToken();
    @Html.ValidationSummary()
    @Html.HiddenFor(m=>m.Id)
    <div class="form-horizontal" role="form">
        <div class="form-group">
            <label class="control-label col-md-3">Name</label>
            <div class="col-md-9">
                @Html.TextBoxFor(m => m.Name, new { @class="form-control" })
                @Html.ValidationMessageFor(m=>m.Name)
            </div>
        </div>
        <div class="form-group">
            <label class="control-label col-md-3">MM Name</label>
            <div class="col-md-9">
                @Html.TextBoxFor(m => m.MmName, new { @class="form-control" })
                @Html.ValidationMessageFor(m=>m.MmName)
            </div>
        </div>
        <div class="form-group">
            <label class="control-label col-md-3">Parent</label>
            <div class="col-md-9">
                @Html.DropDownListFor(m => m.SelectedCategoryId, Model.CategorySelectItems, new { @class = "form-control" })
                @Html.ValidationMessageFor(m=>m.SelectedCategoryId)
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-3 col-md-9">
                <button type="submit" class="btn btn-primary">Save</button>
            </div>
        </div>
    </div>
}

那么请问我怎么能让它运作起来?

0 个答案:

没有答案