动态修改@ Html.HtmlHelper的值

时间:2016-06-14 22:41:30

标签: c# asp.net-mvc razor

我正在尝试修改DataAttributes的行为(Maxlength [int]或StringLength [int]),它会添加" maxlength"内部(textarea)标签及其" int"值。我已经进行了一些研究,我得到的最接近的答案是this postthat question

但是,我希望更进一步。

我已经知道StringLength添加" data-val-length-max"和" data-val-length"属性到标签。 我花了很多时间尝试使用逻辑

在JavaScript不显眼的验证文件中实现解决方案
if tag has data-val-length-max attribute 
    add maxlength attribute to this tag 
    assign its value equal to data-val-length-max value

然而,在我的项目中,Javascript文件经常被加载/卸载,跟踪逻辑流程非常耗时,所以我决定改变方法,并尝试在C#中实现它。

在我的.cshtml文件中,有以下几行:

@Html.myLabelFor(model => model.Project.ProjectDescription, new { @title = "Enter a description for this project" })
@Html.TextAreaFor(model => model.Project.ProjectDescription, new { @class = "textfield_Paragraph", @id = "ProjectDescription" })
@Html.ValidationMessageFor(model => model.Project.ProjectDescription)

我了解到如果最后添加@maxlength,它会成功添加maxvalue:

@Html.TextAreaFor(model => model.Project.ProjectDescription, new { @class = "textfield_Paragraph", @id = "ProjectDescription", @maxlength = 50 })

但是,我不想手动将@maxlenght这一行添加到解决方案中的每个TextAreaFor行;我想把它变成可重用的代码,它会动态地对.cs文件中的TextAreaFor中的每个变量执行这样的操作,这些变量标记如下:

[MaxLength(50)]
[Display(Name = "Project Description")]
public string ProjectDescription { get; set; }

所以我正在考虑使用逻辑

来实现它
if metadata has a MaxLength flag
    htmlAttributes += " ', @maxlength = ' + maxLengthValue"

所以,实际上它仍然是

@Html.TextAreaFor(model => model.Project.ProjectDescription, new { @class = "textfield_Paragraph", @id = "ProjectDescription" })

虽然将加载的最终值为

@Html.TextAreaFor(model => model.Project.ProjectDescription, new { @class = "textfield_Paragraph", @id = "ProjectDescription", @maxlength = 50 })

我想知道这样的事情是否有可能实施,所以我事先知道我是否应该继续思考这个方向。

同样,我上面发布的链接是我能得到的最接近的答案,所以我很好奇它是否尽可能地得到,或者还有更多的改进空间。我非常喜欢不会触及.js文件,除非我绝对必须这样做。

0 个答案:

没有答案