我正在努力弄清为什么我的剑道验证无效......但首先让我备份。剑道验证器未针对MVC局部视图进行射击
我有一个页面和一个按钮的mvc 5网络应用程序。点击按钮,一个模式kendoWindow显示一个局部视图来捕捉用户的两个输入。我有我认为的传统MVC验证过程。
[Validator(typeof(MyModelValidator))]
public partial class MyModel
{ ... }
但是它会发布到一个无效的模型控制器(我是测试无效提交)状态,则立即抛出一个错误,因为它不能完全与更新,它只是附带的“莫代尔”局部视图处理从验证检查必填字段消息。
因此,经过研究和阅读,我确定了...也许不正确......使用kendo验证器是此场景的唯一选项。
所以我着手实施以下Telerik文档。
在模型中,我有5个属性,但我只装饰了一个图形,在完成它们之前,我会先对它进行散列处理。所以我评论了我的MVC验证,并在我的模型中加入这样的:
[Required]
[Display(Name = "Financial Named")]
public virtual string FinancialInstitutionName { get; set; }
在CSHTML:
....snip.....
@Html.LabelFor(model => model.FinancialInstitutionName):
</td>
<td>
@Html.EditorFor(model => model.FinancialInstitutionName)
@Html.ValidationMessageFor(model => model.FinancialInstitutionName)
</td>
.....and further down.....
$(function()
{
$("#formCreateEditFinancier").kendoValidator();
});
而且控制器:
public ActionResult CreateEditFinancialInstitute(int financierId, int isChanging)
{
var model = new FinancierModel();
return
PartialView("~/.../CreateEditFinancialInstitute.cshtml", model);
}
现在上面是什么产生/在部分视图在模态对话框中呈现时被消耗。
下面是什么是所用的“父母”页面与启动模式对话框按钮...
var window = $("#window").kendoWindow(
{
modal: true,
width: "600px",
height: "400px",
title: "Fill in the blanks eh...",
actions: ["Close"],
content: {
url: "@Html.Raw(Url.Action("CreateEditFinancialInstitute", "FinancingPayment"))",
data: { financierId: financierid, isChanging: ischanging }
}
});
window.data('kendoWindow').center();
最后这里是产生的模态窗口的HTML。
<form id="formCreateEditFinancier" action="/FinancingPayment/CreateEditFinancialInstitute" method="post" novalidate="novalidate" data-role="validator">
这是什么novalidate属性呢?我读了这个,它似乎是HTML 5注入的东西...我当然没有指定它。所以我添加了一条json行来摆脱它。
$("#formCreateEditFinancier").removeAttr("novalidate");
的HTML渲染没有它,但我仍然没有客户端验证????
所以最后,我想要的是某种形式的验证....我的意思是我可以使用一些真正的老学校json检查字段长度等,但希望能够使用更新的方法。
编辑
基于iceburg的建议我修改我的模态窗体窗口javascript来此:
var validator = $("#formCreateEditFinancier").kendoValidator().data("kendoValidator");
$("form").submit(function (event)
{
event.preventDefault();
if (validator.validate())
{
alert('gtg');
}
else
{
alert('fail');
}
});
现在,当我装的形式和点击提交(无场完成)它显示警报GTG ....等待它应该失败!
现在查看HTML是否呈现验证装饰。
<input name="FinancialInstitutionName" class="text-box single-line" id="FinancialInstitutionName" type="text" value="" data-val="true" data-val-required="The Financial Named field is required.">
<span class="field-validation-valid" data-valmsg-replace="true" data-valmsg-for="FinancialInstitutionName"></span>
它出现在“必需的”属性没有得到set.If我编辑F12开发工具的HTML添加所需的属性然后点击提交我的验证工作,因为它应该......如此看来问题就出以及我的模型装饰如何呈现。
解决
因此,与iceburg的指导下,我发现我的DataAnnotations没有正常显示....实际上都是他们,但我错过了验证js文件为解释在这里:
Data annotations not working in view model