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, @"['.'[']]", "_");

我想你可以添加括号。

C# MVC 属性名称为 HTML ID

根据您的评论:

恕我直言,您不应该以这种方式使用您的模型。如果需要访问子对象,请创建一个新模型并绑定到该模型以直接公开该模型。然后在控制器中根据需要将原始模型重新拼凑在一起。对于注册表,如果它非常复杂,请尝试将其分解为更小的部分(单独的视图),否则使用组合所有字段(如用户名、密码等)的平面模型,然后将值分配给适当的对象。

请记住,复杂性最低是更好的解决方案,因为它提高了可维护性。

定义模具时

像这样的东西

 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 generatedproperty name specified.