淘汰赛+ mvc 3 +validation
在控制器中,我希望能够获得模型的客户端validation规则。 我已经使用数据注释附加了一些属性,并希望能够通过ajax调用回传到客户端,所以我可以自动构buildjqueryvalidation选项。
通常这是免费的与不显眼的东西,但我试图利用淘汰赛的绑定,而仍然不必复制服务器和客户端上的validation规则。
没有在模型服务器端使用reflection,我有点不确定如何实现这一点。
在我的Mvc Controls Toolkit中,我开发了基于knockout库的Helpers。 这些助手不仅可以帮助编写淘汰赛代码,还可以通过Unobtrusivevalidation和全球化来增强淘汰赛库。 此外,绑定机制得到了增强,包括复杂的控件,如DatetimePicker,和其他“复杂”(由不同的html部件)控件。
最后,敲除模板可以通过Razor助手来定义。
请参阅这里 , 这里和这里的文档。 我也有一些教程,展示了如何使用我的助手实现高级function:
使用Mvc控件工具包的客户端模板进行低带宽传输
用客户端模板处理大量数据
用客户端模板处理大量的数据2
根据您确切需要做的事情, Breeze js可以是最好的解决scheme。 特别是,如果您使用EF,则可以在客户端复制服务器EF的DbContext
大部分function,当然还包括validation,还可以更改跟踪, .saveChanges
,一种类似于LINQ查询的简单语法,caching,序列化和反序列化以允许脱机工作,以及许多其他事情。
使用Breeze js的基本步骤是:
- 在服务器上创build一个EF模型
- 在服务器上添加一个NuGet包来创build将模型公开给客户端的Web API服务。 这是完成的C#代码数量惊人。 其中一件事就是暴露元数据:定义对象,关系和额外的信息,如数据注释validation信息
- 为客户端添加一个js的Nuget包,用于在客户端复制EF行为。
当然,并不是服务器上的所有function都会在客户端上被复制,但是你可以做很多事情:
- 在客户端创build新的实体
- 在客户端进行查询,将在服务器上执行并返回给客户端
- 修改客户端上的实体:创build,修改,删除…
- 在客户端创build关系:例如在父对象中创build新的chlid实体
- 在客户端调用
saveChanges
,这将把所有跟踪到的更改传输到服务器,以便更新后端 - 当然,当你这样做的时候,你会得到自动的客户端validation,并且当你调用
.saveChanges
最后,您可以扩展和修改服务器代码以包含一些业务逻辑,这样您可以做的远不止是将EF模型公开给客户端。
这是一个相当的任务。 您希望能够将您的C#代码转换为具有相应数据types转换等的Javascript。您最好在服务器端和客户端写两个单独的validation集合。 要比自己编写自己的转换框架和维护它更容易
在模型上使用你喜欢的属性validation:
public class ModelWithValidation { public int Id { get; set; } [Required] public string Name { get; set; } }
在mvcforms
@using( Html.BeginForm()) { @Html.TextBoxFor(m => m.Name, new {data_bind = "value: name"}) @Html.ValidationMessageFor(m => m.Name) }
在jQuerytesting中,如果表单是有效的onSubmit或在knockout保存函数中调用下一个代码来validationinput。 您必须包含jQuery.unobtrusive *和jQuery.validate *库。 不要忘记在服务器端validationinput!
var form = $("form"); form.removeData('validator'); form.removeData('unobtrusiveValidation'); $.validator.unobtrusive.parse(form); $("form").valid() //true false
- 如何更新ASP.NET标识中的声明?
- MVC剃刀单选button
- HttpRequest与HttpRequestMessage与HttpRequestBase
- 如何在ASP.NET MVC中RedirectToAction而不会丢失请求数据
- ASP.NET MVC中的会话variables
- 关于jqGrid列标题filter和高级过滤对话框的两个相关问题
- 如何configurationELMAH以使用Windows Azure? 我在Elmah.axd上得到了一个404
- ASP.NET MVC的下拉列表中有一个默认的空选项
- 为什么DropDownListFor在提交之后会失去多重select,但是ListBoxFor却没有?