我试图将编辑器模板用于复杂属性,但默认情况下模板中的字段设置为要求用户填写它们。是否有一种简单的方法可以避免这种情况并仍然使用& #39; editorfor&#39 ;?我知道有一个[必需的]数据注释,但我没有使用它,我无法找到相反的命令。模板显示正确,我只是不想要字段。
我的视图模型中的属性:
[UIHint("EditPriceInfo")]
[Display(Name="Price info")]
public PriceInfo PriceInfo { get; set; }
从模板文件' /Views/Shared/EditorTemplates/EditPriceInfo.cshtml'。 (由班级脚手架创建' PriceInfo',见下文。):
@model MyProject.Models.PriceInfo
<div class="form-group">
@Html.LabelFor(model => model.HourPrice, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.HourPrice)
@Html.ValidationMessageFor(model => model.HourPrice)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.DayPrice, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.DayPrice)
@Html.ValidationMessageFor(model => model.DayPrice)
</div>
</div>
通过&#39;编辑&#39; -view:
调用模板<h4>@Html.DisplayNameFor(model => model.PriceInfo)</h4>
<div class="form-group">
<div class="col-md-10">
@Html.EditorFor(model => model.PriceInfo)
@Html.ValidationMessageFor(model => model.PriceInfo)
</div>
</div>
原版物中的物业&#39; PriceInfo&#39;实体:
[Display(Name = "Price/hour")]
public decimal HourPrice { get; set; }
[Display(Name = "Price/day")]
public decimal DayPrice { get; set; }
答案 0 :(得分:0)
根据this related question的接受答案:
ModelMetadata.IsRequired将告诉您RequiredAttribute是否需要复杂类型(或Nullable中包含的值类型),但它会为不可为空的值类型提供误报(因为它们是隐式需要的)。 / p>
这意味着我的示例中的属性将是“隐式需要的”,因为它是一个未包含在Nullable&lt; T&gt;中的复杂类型。我通过将'PriceInfo'实体类中的属性设置为可为空来解决了这个问题,就像这样(类型后面的问号):
[Display(Name = "Price/hour")]
public decimal? HourPrice { get; set; }
[Display(Name = "Price/day")]
public decimal? DayPrice { get; set; }