我正在开发一个ASP.NET MVC Web应用程序。我正在对控制器中的一个视图模型进行远程验证。但它没有用。甚至没有执行控制器中的远程验证方法。我在线搜索解决方案,但无法解决我的问题。我发现了这些(Remote Attribue Validation not firing in Asp.Net MVC和ASP.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控制台
这是浏览器的调试器
这是我的观点
@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>
}
那么请问我怎么能让它运作起来?