首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >HiddenFor应该尊重DisplayFormat吗?

HiddenFor应该尊重DisplayFormat吗?
EN

Stack Overflow用户
提问于 2012-04-03 01:37:36
回答 2查看 3.7K关注 0票数 2

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

代码语言:javascript
复制
[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
public virtual DateTime SavedAt { get; set; }

在使用“Controllerwith读/写操作和视图,使用EntityFramework”模板生成的视图中,我有以下代码来为其创建一个编辑器:

代码语言:javascript
复制
<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>

它产生这个输出:

代码语言:javascript
复制
<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“。

如果我用以下内容替换视图代码片段:

代码语言:javascript
复制
@Html.HiddenFor(model => model.SavedAt)

此代码生成如下:

代码语言:javascript
复制
<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属性定义的格式?

如果没有,那么以所需的格式输出隐藏字段的好方法是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-03 06:06:37

需要HiddenFor来遵守DisplayFormat属性定义的格式设置吗?

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

如果不是

,那么将隐藏字段以所需的格式输出的好选择是什么?

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

代码语言:javascript
复制
@if (!ViewData.ModelMetadata.HideSurroundingHtml)
{
    @Html.Encode(ViewData.TemplateInfo.FormattedModelValue)
}
@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue)

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

代码语言:javascript
复制
[DisplayFormat(DataFormatString = "{0:o}", ApplyFormatInEditMode = true)]
[HiddenInput(DisplayValue = false)]
public virtual DateTime SavedAt { get; set; }

最后:

代码语言:javascript
复制
@Html.EditorFor(x => x.SavedAt)
票数 6
EN

Stack Overflow用户

发布于 2012-08-17 19:50:43

我发现了使用@Html.HiddenFor(model => model.SavedAt)时出现的问题--它将防止您不得不进行回发。

为了避免丢失日期值,我使用TempData,然后在[HttpPost]上重新分配模型值

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9986050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档