如何使用javascript添加@html标签?

有时您需要添加另一个textbox或其他输入类型以获取其他信息。 好的,比方说, Customer可以有很多Address 。 当用户完成表单并且当他到达地址时,他可以点击加号以为另一个地址添加另一个文本框。 所以我做的是这样的:(不知道是否推荐)

HTML:

 Additional Address 

JS:

  $(function() { var i = 0; var addAddress = function() { var strBuilder = ''; $('.address-container').append(strBuilder); i++; return false; }; $('.add-address').click(addAddress); });  

所以我的问题是:

  1. 可以将文本框添加为@Html.EditorFor()吗?
  2. 如果我还可以添加@Html.ValidationMessageFor() ,那真的很棒吗,有可能吗?

我正在使用ASP.NET MVC 4; EF Code第一种方法。

任何帮助将非常感激。 谢谢。

只需使用i作为name属性。

 name="Addresses[' + i + '].Location" 

这与你的模型绑定。

  var i = 0; var addAddress = function() { var strBuilder = ''; $('.address-container').append(strBuilder); i++; return false; }; 

看到这篇对我有用的post 。

更新

对于validation,只需添加此属性以及input元素。

 data-val-email="The Email field is not a valid e-mail address." data-val="true" 

这背后的想法是,使用name属性和validation附加正确的元素(data-val =“true”)。 您可以看到已经使用validation的已经工作的页面的渲染html。

不,剃刀在服务器端工作。 进入客户端后,您无法访问@Html 。 这篇文章展示了如何使用列表建模绑定,尽管看起来你已经掌握了使用你的迭代器。

一般来说,我会让razor产生一个模拟的Address[0] ,然后将生成的html复制到javascript中进行生成。 它应该保留jQuery寻找的所有客户端validation属性。

可以在客户端使用Razor生成的标签。 创建一个EditorFor模板文件,该文件使用{...}语法进行动态属性。 然后像这样使用它。

  

您无法在客户端添加HTML帮助程序。 但是,您可以通过多种方式使用jquery添加简单的HTML控件。 您可以使用上面的append函数或html函数。

您的validation也必须在客户端处理。

但是对于最佳实践,您应该创建地址文本字段的部分视图模板,然后在每次用户单击添加新地址时使用Knockout添加新模板。 然后,您可以轻松处理validation,因为您的viewmodel将绑定到您的MVC模型。