gpt4 book ai didi

c# - HiddenFor 应该尊重 DisplayFormat 吗?

转载 作者:行者123 更新时间:2023-11-30 20:06:16 25 4
gpt4 key购买 nike

在 ASP.NET MVC 4 Beta 中,我有一个具有此属性的实体:

[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
public virtual DateTime SavedAt { get; set; }

在使用“具有读/写操作和 View 的 Controller ,使用 EntityFramework”模板生成的 View 中,我使用以下代码为其创建编辑器:

<div class="editor-label">
@Html.LabelFor(model => model.SavedAt)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.SavedAt)
@Html.ValidationMessageFor(model => model.SavedAt)
</div>

产生这个输出:

<div class="editor-label">
<label for="SavedAt">SavedAt</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-date="The field SavedAt must be a date." data-val-required="The SavedAt field is required." id="SavedAt" name="SavedAt" type="text" value="2012-03-31T22:45:18.2244059" />
<span class="field-validation-valid" data-valmsg-for="SavedAt" data-valmsg-replace="true"></span>
</div>

请注意日期格式为“2012-03-31T22:45:18.2244059”。

如果我用这个替换 View 代码片段:

@Html.HiddenFor(model => model.SavedAt)

生成此代码:

<input data-val="true" data-val-date="The field SavedAt must be a date." data-val-required="The SavedAt field is required." id="SavedAt" name="SavedAt" type="hidden" value="31/03/2012 22:45:18" />

请注意,日期现在的格式为“31/03/2012 22:45:18”。

问题是:

HiddenFor 是否应该遵循 DisplayFormat 属性定义的格式?

如果不是,以所需格式输出隐藏字段的最佳替代方法是什么?

最佳答案

Is HiddenFor expected to honor the formatting defined by the DisplayFormat attribute?

不,它没有。只有 EditorFor 和 DisplayFor 助手使用 DisplayFormat。

If not, what would be a good alternative to have the hidden field output in the desired format?

您不应该真正关心隐藏字段的格式。它是隐藏的,没有人看到它。但是,如果出于某种原因您想要自定义格式,您可以使用自定义编辑器模板覆盖默认模板 (~/Views/Shared/EditorTemplates/HiddenInput.cshtml):

@if (!ViewData.ModelMetadata.HideSurroundingHtml)
{
@Html.Encode(ViewData.TemplateInfo.FormattedModelValue)
}
@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue)

然后使用 [HiddenInput] 属性装饰您的 View 模型属性,以指示您希望将其呈现为隐藏字段:

[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
[HiddenInput(DisplayValue = false)]
public virtual DateTime SavedAt { get; set; }

最后:

@Html.EditorFor(x => x.SavedAt)

关于c# - HiddenFor 应该尊重 DisplayFormat 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9986050/

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