C# MVC 属性名称为 HTML ID
本文关键字:HTML ID MVC 属性 | 更新日期: 2023-09-27 18:35:39
我知道我可以手动执行此操作,但是是否有内置函数将 C# MVC Razor 属性名称转换为 Razor 将用作 HTML ID 的值?
要扩展此问题:
我正在尝试在部分视图中使用 JavaScript 访问 HTML 元素。(部分视图意味着我无法直接访问参数名称。
以下两个部分解决方案使 ID 加倍,为您提供ParameterName_ParameterName:
string name = ViewData.TemplateInfo.HtmlFieldPrefix
@Html.Id(name)
@ViewData.TemplateInfo.GetFullHtmlFieldId(name)
我目前要采用的解决方案:
Regex.Replace(name, @"['.'[']]", "_");
我想你可以添加括号。
根据您的评论:
恕我直言,您不应该以这种方式使用您的模型。如果需要访问子对象,请创建一个新模型并绑定到该模型以直接公开该模型。然后在控制器中根据需要将原始模型重新拼凑在一起。对于注册表,如果它非常复杂,请尝试将其分解为更小的部分(单独的视图),否则使用组合所有字段(如用户名、密码等)的平面模型,然后将值分配给适当的对象。
请记住,复杂性最低是更好的解决方案,因为它提高了可维护性。
定义模具时
像这样的东西
public class AnnonymousModel
{
[Required]
[StringLength(20, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 3)]
[Display(Name = "User name")]
[RegularExpression(@"^[A-Za-z'n'r'0-9_ ]+$")]
public String RegisterUsername {get; set;}
}
然后在 MVC 视图页面中使用它
对于剃须刀
@Html.TextBoxFor(m => m.RegisterUsername, new { @class = "inp-form", @placeholder = "User name" })
对于 asp
<%Html.TextBoxFor(m => m.RegisterUsername, new { @class = "inp-form", @placeholder = "User name" })%>
在 HTML 中呈现是这样的
<input type="text" value="" placeholder="User name" name="RegisterUsername"
id="RegisterUsername" data-val-required="The User name field is required." data-val-regex-
pattern="^[A-Za-z'n'r'0-9_ ]+$" data-val-regex="The field User name must match the regular
expression '^[A-Za-z'n'r'0-9_ ]+$'." data-val-length-min="3" data-val-length-max="20"
data-val-length="The User name must be at least 3 characters long." data-val="true"
class="inp-form">
所以Id
automatically generated
为property name specified
.