如何使用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); });
所以我的问题是:
- 可以将文本框添加为
@Html.EditorFor()
吗? - 如果我还可以添加
@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模型。