0

我想使用 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 是否正确?哪一个将用于将数据发送回数据库?仅显示预定义的日期时间信息并将其发送到数据库的正确方法是什么?

4

1 回答 1

0

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

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

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

或者你可以使用<div>@Model.record_time.ToString("MM/dd/yyyy")</div>

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

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

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

于 2016-10-15T10:56:07.773 回答