使用htmlAttributes重载时TextAreaFor样式与ID设置失效问题
为什么你的TextAreaFor样式和ID没生效?
嘿,我来帮你搞清楚这个问题的根源!
你遇到的问题核心是对TextAreaFor重载方法的参数结构理解错了,咱们一步步拆解:
错误写法的问题所在
你第一个写法里用了嵌套的htmlAttributes对象:
@Html.TextAreaFor(model => model.AdminSetting.Style, new { htmlAttributes = new { @class = "form-control", @style = "width: 100%;", @id = "HelloWorld" } })
这里你误以为第二个参数需要把HTML属性包裹在htmlAttributes键里,但实际上这个重载的第二个参数本身就是用来接收HTML属性集合的匿名对象。当你这么写的时候,Razor会把整个htmlAttributes当成一个普通的HTML属性来渲染——最终生成的textarea标签会多一个htmlAttributes="..."的属性,而不是把里面的class、style、id解析成对应的标签属性,自然你的样式和ID都不会生效。
正确写法为什么能工作
而你去掉嵌套后的写法:
@Html.TextAreaFor(model => model.AdminSetting.Style, new { @class = "form-control", @style = "width: 100%;", @id = "HelloWorld" })
用的是TextAreaFor的正确重载:TextAreaFor<TModel, TProperty>(HtmlHelper<TModel>, Expression<Func<TModel, TProperty>>, Object)。这里的第二个Object参数就是专门用来传递HTML属性的,Razor会自动遍历这个匿名对象的键值对,把它们转换成对应的HTML属性(比如@class转成class,@style转成style),所以样式和ID都能正常生效。
一句话总结
别给HTML属性套htmlAttributes的壳!直接把所有需要的属性定义在一个匿名对象里传给第二个参数就好~
内容的提问来源于stack exchange,提问作者Willy David Jr
相关产品推荐
相关产品推荐

