【问题标题】:Correctly display data in View and save it using HiddenFor and DisplayFor在 View 中正确显示数据并使用 HiddenFor 和 DisplayFor 保存
【发布时间】:2016-10-15 09:57:44
【问题描述】:

我想使用 hiddenFor 字段将 record_time 保存到数据库,同时在 html.display 或类似字段中显示日期而不进行编辑。

创建动作

public ActionResult Create()
    {            
        Record newRecord = new Record();
        newRecord.user_id = 1; //let it be 1 for simplicity
        newRecord.record_time = System.DateTime.Now;
        return View(newRecord);
    }

创建视图

    <div class="form-group">
        @Html.LabelFor(model => model.user_id, "User name", htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.HiddenFor(model => model.user_id)
        </div>
    </div>
    <div class="form-group">
        @Html.LabelFor(model => model.record_time, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.HiddenFor(model => model.record_time)
            
            //this line I'm concerned about
            @Html.DisplayFor(model => model.record_time, new { htmlAttributes = new { @class = "form-control" } })             
        </div>
    </div>
  1. 关于 user_id。对新记录使用 hiddenFor 而不是 editorFor 是否正确?

  2. 关于记录时间。同时使用 hiddenFor 和 displayFor 是否正确?哪一个将用于将数据发送回数据库?仅显示预定义的日期时间信息并将其发送到数据库的正确方法是什么?

【问题讨论】:

  • 只有表单控件回传一个值(DisplayFor() 不创建表单控件)。但是对于record_time,您根本不应该有表单控件-您只是在保存数据之前在控制器中设置。至于user_id - 如果你不想编辑它,那么它应该是一个隐藏输入

标签: asp.net asp.net-mvc html-helper html.hiddenfor


【解决方案1】:

表单仅提交其表单控件(输入、选择、文本区域)的名称/值对,DisplayFor() 不生成表单控件。

如果您想使用DisplayFor() 格式化日期,则可以使用DisplayFormatAttribute,例如

[DisplayFormat(DataFormatString = "{0:MM/dd/yyyy}")]
public DateTime record_time { get; set; }

或者你可以使用&lt;div&gt;@Model.record_time.ToString("MM/dd/yyyy")&lt;/div&gt;

请注意,DisplayFor() 仅呈现文本,而不是元素,并且它没有接受 htmlAttributes 的重载(没有可以应用属性的元素,所以它只是

@Html.DisplayFor(m => m.record_time)

作为旁注,您的两个属性的名称表明它们适用于创建/编辑记录的用户以及创建记录的日期。如果是这种情况,您认为不应包含这些值的任何输入。两者都应该在保存数据模型之前立即在 POST 方法中设置。如果它是一个创建视图,那么显示record_time(假设它是记录的创建日期)也没有任何意义(它还没有被创建)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多