我正在尝试修改DataAttributes的行为(Maxlength [int]或StringLength [int]),它会添加" maxlength"内部(textarea)标签及其" int"值。我已经进行了一些研究,我得到的最接近的答案是this post和that 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文件,除非我绝对必须这样做。