gpt4 book ai didi

c# - 如何将 "Html.SomeHelper"属性值设置为等于模型属性名称?

转载 作者:太空宇宙 更新时间:2023-11-03 12:38:07 25 4
gpt4 key购买 nike

我有表单模型,我想使用属性名称作为某些表单字段属性的值。最好的方法是什么? (在这种情况下,我想要 id="PropertyName")。

// FormViewModel
[Display(Name = "First name*")]
[Required(ErrorMessage = "This field is required")]
public string FirstName { get; set; }

// Index.cshtml
<form id="form1" asp-controller="controller" asp-action="Index" method="post">
<div class="form-group">
@Html.TextBoxFor(m => m.FirstName, new
{
@id = "firstName",
@placeholder = Html.DisplayNameFor(m => m.FirstName)
})
@Html.ValidationMessageFor(m => m.FirstName)
</div>
</form>

谢谢!

最佳答案

正如@teo van kot 所说,MVC 默认情况下会这样做。但是,如果您的属性的路径类似于 model.Submodel.PropertyName,则 ID 属性将为“Submodel_PropertyName”。如果您只需要“PropertyName”,则可以使用此扩展方法/包装器:

public static class Extension method
{
public static IHtmlContent CustomTextBoxFor<TModel, TResult>(this IHtmlHelper<TModel> helper, Expression<Func<TModel, TResult>> expression)
{
// very simple implementation, can fail if expression is not as expected!

var body = expression.Body as MemberExpression;

if(body == null) throw new Exception("Expression refers to a method, not a property");

return helper.TextBoxFor(expression, null, new { id = body.Member.Name, placeholder = helper.DisplayNameFor(expression) });
}
}

在 Razor View 输出将是这样的:

@Html.CustomTextBoxFor(x => x.Foo)
<input id="Foo" name="Foo" type="text" placeholder="Foo" value="">

@Html.TextBoxFor(x => x.Foo)
<input id="Foo" name="Foo" type="text" value="">

@Html.CustomTextBoxFor(x => x.AnotherModel.Foo)
<input id="Foo" name="AnotherModel.Foo" type="text" placeholder="Foo" value="">

@Html.TextBoxFor(x => x.AnotherModel.Foo)
<input id="AnotherModel_Foo" name="AnotherModel.Foo" type="text" value="">

第一种和第三种方法有问题,所以使用这种技术,如果您在模型中的多个位置具有相同的属性名称:

@Html.CustomTextBoxFor(x => x.DeliveryAddress.StreetName)
@Html.CustomTextBoxFor(x => x.BillingAddress.StreetName)

两个输入标签将具有相同的 ID 属性!

示例是为 MVC6 编写的,MVC5 使用不同的 HtmlHelper 类型。

关于c# - 如何将 "Html.SomeHelper"属性值设置为等于模型属性名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40160267/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com