C#MVC属性名称为HTML id

时间:2013-10-16 11:27:31

标签: c# asp.net-mvc visual-studio razor

我知道我可以手动执行此操作,但是是否有内置函数将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, @"[\.\[\]]", "_");

我想你可以添加括号。

2 个答案:

答案 0 :(得分:1)

根据您的意见:

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

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

答案 1 :(得分:0)

当你定义一个moldel

类似这样的事情

 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视图页面中使用它

对于Razor

@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