我知道我可以手动执行此操作,但是是否有内置函数将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, @"[\.\[\]]", "_");
我想你可以添加括号。
答案 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 generated
为property name specified
。