将对象传递给HTML属性
如何将对象传递给HTML属性? 例如,我有以下代码:
var attrs = new { id = "myid", style = "color: Red;" };
如何将attrs转换为像这样的string来将它们embedded到HTML标记中:
id="myid" style="color: Red;"
提前致谢 :)
RouteValueDictionary
类提供了这个function,令人惊讶的是:
IDictionary<string, object> htmlAttributes = new RouteValueDictionary(attrs);
然后,你可以使用这个字典与一个TagBuilder
,你可能会使用它:
var tagBuilder = new TagBuilder("input"); tagBuilder.MergeAttributes(htmlAttributes); tagBuilder.ToString(TagRenderMode.Normal);
您可以在ASP.NET MVC源代码本身中看到这一点; 其中一个比较简单的例子就是TextAreaExtensions.cs 。
编辑:
为了正确地将“data_attr”转换为“data-attr”,请使用AnonymousObjectToHtmlAttributes
静态方法。
IDictionary<string, object> htmlAttributes = HtmlHelper.AnonymousObjectToHtmlAttributes(attrs);
你不需要转换成string。 HTML Helpers的最后一个参数是Object。 你只要给它像上面写的对象:
对于exmample
@Html.TextBoxFor(x => x.Foo, new { size = 10, maxlength = 10 }) @Html.TextAreaFor(x => x.Notes, new { @class = "additionalInfo" }) @Html.TextBoxFor(x=>x.Registration.Address.Postcode, new {type="number", @class="postcode numeric", size=5, maxlength=5})
在一个侧面说明你可能不应该设置风格直接与您的HTML内联,并使用CSS类/select器,而不是一个单独的样式表。 另外,当使用MVC HTML助手时,每个DOM元素的ID应该自动设置
以下是如何做这个转换:
var htmlAttributes = new { id="myid", @class="myclass" }; string string_htmlAttributes = ""; foreach (PropertyDescriptor property in TypeDescriptor.GetProperties(htmlAttributes)) { string_htmlAttributes += string.Format("{0}=\"{1}\" ", property.Name.Replace('_', '-'), property.GetValue(htmlAttributes)); }
PropertyDescriptor
属于类System.ComponentModel
- ModalPopupExtender确定button单击事件不发射?
- 如何configurationstream利的NHibernate输出查询,而不是控制台跟踪或debugging?
- 为什么我在asp.net中得到“线程被中止”?
- 如何在ASP.NET表单上创buildcheckbox?
- 什么时候应该在ASP.NET MVC中使用asynchronous控制器?
- 为什么要在内置的ASP.NET Core DI容器上使用第三方DI容器?
- 为什么ASP.NET Identity接口为主键和外键使用string?
- configuration节'system.web.extensions'不能被读取,因为它缺less一个节声明
- 如何检测浏览器窗口/选项卡closures事件?