我有点像谷歌,但是使用jquery创建控件不能太多.我的主要问题是如何动态渲染控件,然后在提交表单时获取它们的值.
如果有人可以在这里提出一些样品/教程,那将是很棒的
解决方法
通常在客户端上添加动态控件
添加额外的HTML元素是简单地在客户端上完成的,因为它快速,方便,不需要服务器端状态保存.并且因为(几乎)没有必要在服务器上加载这些.你可能已经发现,Asp.net MVC与Asp.net WebForms完全不同.
一个容易理解的例子
所以最简单的方法是在客户端上加载模板,然后根据该特定的模板添加新的项目. This JSFiddle shows you how.如果您不能在HTML中提供模板,您可以随时通过Ajax加载它,但是只有当有以下任何一种时,
>添加太多不同的模板 – 一个例子是一个用户列表的页面,每个用户需要一个复杂的模板,这可以减缓由于DB请求和膨胀的HTML
>模板取决于用户已经输入的其他数据,在这种情况下,我们无法在用户提供此数据之前准备一个模板(尽管.tmpl提供了条件和循环,所以我们应该尽可能使用它们).
基本上我使用jQuery和它的.tmpl()插件来快速地生成复杂的项目(复杂的,我的意思是不是由一个HTML元素组成),具有正确的命名和ID等等.控制名称对应于Asp.net MVC的工作原理.这些生成的字段将容易地建模绑定到此控制器动作方法:
public ActionResult Experiences(Experience experience) { // do what's appropriate }
public class Experience { [required] public IList<Company> Companies { get; set; } ... } public class Company { [required] public string Name { get; set; } ... }
模型结合IList T是这里的想法
基本上每当你模型绑定到IList< T> (当您动态添加新的和新的控件时,基本上会发生这种情况)您正在使用正确的输入形式命名,需要在客户端上解决问题.您可以在my blog post中阅读与此有关的所有细节,以及我在哪里解释问题,并提供一些类似于此的解决方案.
Important: Instead of linking to a CDN with jQuery
.tmpl()
I had to copy the minimized version of it directly into HTML part in JSFiddle example,because otherwise it won’t load the plugin.