Asp.Net MVC5 - Editorfor模板,如何设置字段为不需要?

时间:2014-05-12 09:54:35

标签: asp.net-mvc-5

我试图将编辑器模板用于复杂属性,但默认情况下模板中的字段设置为要求用户填写它们。是否有一种简单的方法可以避免这种情况并仍然使用& #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; }

1 个答案:

答案 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; }