我是 MVC 新手,想知道如何在 MVC3 中动态创建控件?就我而言,情况是有一个表格,候选人可以在其中输入他的工作经历,他可以根据他之前工作过的公司数量添加多个条目。因此,当用户说“添加另一个”时,需要动态添加用户输入详细信息的控件集。
我用 google 搜索了一下,但除了使用 jquery 创建控件之外,没有太多的了解。我的主要问题是如何动态渲染控件,然后在提交表单时获取它们的值。
如果有人可以建议一些关于此的示例/教程,那就太好了?
显然您有 Asp.net WebForms 背景,因此在比较 MVC 和 WebForms 时遇到一些问题。
动态控件通常添加在客户端
添加额外的 HTML 元素只需在客户端完成,因为它快速、方便并且不需要服务器端状态保存。因为(几乎)不需要将它们加载到服务器上。您可能已经发现,Asp.net MVC 的工作方式与 Asp.net WebForms 完全不同。
一个容易理解的例子
因此,最简单的方法是在客户端加载模板,然后根据该特定模板添加新项目。这个 JSFiddle 向您展示了如何。如果您无法在 HTML 中提供模板,您始终可以通过 Ajax 加载它,但只有在出现以下情况时才应该这样做:
- 添加太多不同的模板 - 例如一个包含用户列表的页面,其中每个用户都需要一个复杂的模板,这可能会由于数据库请求和臃肿的 HTML 而减慢速度
- 模板依赖于用户已经输入的其他数据,在这种情况下,我们无法在用户提供此数据之前准备模板(尽管
.tmpl
提供条件和循环,因此我们应该尽可能使用它们)。
基本上我用过 jQuery 及其.tmpl()
插件可以快速生成具有正确命名和 ID 等的复杂项目(我所说的复杂是指不包含单个 HTML 元素)。控件名称对应于 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>
(这基本上是在动态添加新控件时发生的)您遇到了一些问题,需要在客户端上通过正确的输入表单命名来解决。您可以阅读与此相关的所有详细信息我的博文以及我解释问题并提供与此类似的解决方案的地方。
重要的:而不是使用 jQuery 链接到 CDN.tmpl()
我必须将其最小化版本直接复制到 JSFiddle 示例中的 HTML 部分,否则它将无法加载插件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)