在控制器中,我希望能够获得模型的客户端验证规则。我使用数据注释附加了一些属性,并希望能够通过ajax调用将某些内容传递回客户端,以便我可以自动构建jquery验证选项。Knockout + mvc 3 +验证
正常情况下,这是免费的与不显眼的东西,但我试图利用淘汰赛的绑定,而不必复制服务器和客户端上的验证规则。
没有在模型服务器端使用反射,我有点不确定如何实现这一点。
在控制器中,我希望能够获得模型的客户端验证规则。我使用数据注释附加了一些属性,并希望能够通过ajax调用将某些内容传递回客户端,以便我可以自动构建jquery验证选项。Knockout + mvc 3 +验证
正常情况下,这是免费的与不显眼的东西,但我试图利用淘汰赛的绑定,而不必复制服务器和客户端上的验证规则。
没有在模型服务器端使用反射,我有点不确定如何实现这一点。
这是一项相当艰巨的任务。你希望能够通过相应的数据类型转换等将C#代码转换为Javascript。你最好在服务器端和客户端写两个单独的验证集合。与自己编写自己的转换框架并维护自己的转换框架相比,维护它要容易得多
我不认为这很容易:-s – RubbleFord 2011-04-22 05:32:36
可能有一小组标准验证可以即时生成JS的类型(例如required,regex等);只有自定义的验证器,你必须在客户端和服务器上实现。 – namuol 2011-05-13 13:09:42
在我的Mvc Controls Toolkit中,我开发了基于knockout库的Helpers。这些助手不仅可以帮助编写淘汰赛代码,还可以通过Unobtrusive验证和全球化来增强淘汰赛库。此外,绑定机制得到了增强,以包含诸如DatetimePicker等复杂控件以及其他“复杂”(由不同html部件制作)控件。
最后,敲除模板可以通过Razor助手定义。
请参阅文档here,here,here和here。我也有一些教程,说明如何实现我的助手高级功能:
Low BandWidth Transfers with The Client Side Templates of the Mvc Controls Toolkit
这很好,但我使用FluentValidation进行验证,它更新了ModelState对象。当呈现视图时,由FluentValidation框架生成的来自ModelState的错误将适当地应用于每个输入。 MVC控件工具包是否查看模型状态来确定哪些输入需要突出显示? – Dmitry 2012-10-11 20:05:17
服务器端错误取自模型状态,因此它们可以与使用模型状态的任何技术一起使用......并且如果您将错误手动添加到模型状态。 – 2012-10-12 15:07:38
我会讨厌三重验证。验证域模型,验证视图模型,现在是另一个库......它的重复类型。应** **验证,而不是3. – 2013-03-08 19:44:30
在模型中使用的属性验证,你喜欢:
public class ModelWithValidation
{
public int Id { get; set; }
[Required]
public string Name { get; set; }
}
以mvc形式
@using(Html.BeginForm())
{
@Html.TextBoxFor(m => m.Name, new {data_bind = "value: name"})
@Html.ValidationMessageFor(m => m.Name)
}
在jQuery测试中,如果表单是有效的onSubmit或在knockout保存函数中调用下一个代码来验证输入。您必须包含jQuery.unobtrusive *和jQuery.validate *库。不要忘记在服务器端验证输入!
var form = $("form");
form.removeData('validator');
form.removeData('unobtrusiveValidation');
$.validator.unobtrusive.parse(form);
$("form").valid() //true false
根据您确切需要做的事情,Breeze js可能是最佳解决方案。特别是,如果您使用EF,则可以在客户端复制服务器EF DbContext
的大部分功能,当然还包括验证,还包括更改跟踪.saveChanges
,这是一种类似于LINQ查询的简单语法,缓存,序列化和反序列化以允许离线工作以及其他许多事情。
的基本步骤与微风JS工作是:
当然,并不是所有的服务器上的功能将在客户端上复制的,但你可以做很多事情:
saveChanges
,这将使得后台更新,当然.saveChanges
最后额外的服务器验证,可以扩展和修改服务器代码,包括一些业务逻辑,这样就可以做比单纯的EF模型暴露给客户更多。
您是否找到了可接受的解决方案?如果是这样,请在这里回答你自己的问题。 – 2011-09-29 21:26:25
目前还没有,转移到另一个项目,但将返回。 – RubbleFord 2011-09-30 07:56:03
请参阅:http://stackoverflow.com/questions/9878639/upshot-mvc-4-handling-of-date-knockout-bindings/9890429#9890429 – 2012-04-16 11:28:51