在ASP.NET MVC中,使用Html Helper时,ID中的下划线可能会被替换为句点。这是因为在ASP.NET MVC中,ID中的下划线被视为一种特殊字符,用于表示嵌套的属性。例如,ID "foo_bar" 将被视为属性 "foo" 的子属性 "bar"。
为了避免这种情况,可以使用以下方法之一:
@Html.TextBoxFor(m => m.Foo_Bar, new { id = Html.IdFor(m => m.Foo_Bar).Replace(".", "_") })
public static MvcHtmlString MyTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
{
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var id = metadata.PropertyName.Replace(".", "_");
var name = htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName(id);
var value = metadata.Model;
var attributes = new RouteValueDictionary();
attributes.Add("id", id);
attributes.Add("name", name);
attributes.Add("value", value);
return MvcHtmlString.Create(string.Format<input type=\"text\" {0} />", TagBuilder.Create(attributes).ToString(TagRenderMode.SelfClosing)));
}
然后在视图中使用自定义Html Helper:
@Html.MyTextBoxFor(m => m.Foo_Bar)
这样,生成的HTML元素的ID将不再包含句点,而是使用下划线替换。
领取专属 10元无门槛券
手把手带您无忧上云