2014-10-01 47 views
1

我正在努力弄清为什么我的剑道验证无效......但首先让我备份。剑道验证器未针对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

回答

1

验证通常通过在提交表单时验证表单中的输入字段起作用。你可以改变你的网址动作为输入类型提交,它应该工作。或者在按钮点击处理程序中手动调用kendo验证器.validate()方法。 保持对它的引用您的验证:

var validator = $("#formCreateEditFinancier").kendoValidator().data("kendoValidator"); 

然后按一下按钮:

if(validator.validate()){ 
//submit 
} 
else{ 
//not valid show errors. 
} 

在这里看到: http://demos.telerik.com/kendo-ui/validator/index

对于没有验证我相信,剑道或MVC是补充说。它告诉浏览器不要使用内置验证的HTML 5。