2016-10-15 26 views
0

不確定如何更好地表達問題。我希望使用hiddenFor字段將record_time保存到數據庫,同時在html.display中顯示日期或類似於該字段而不進行編輯。在View中正確顯示數據並使用HiddenFor和DisplayFor保存它

CREATE動作

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); 
    } 

CREATE VIEW

<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)關於record_time。使用hiddenFor和displayFor是否正確?哪一個將用於將數據發回數據庫?只顯示預定義的日期時間信息並將其發送到數據庫的正確方法是什麼?

+1

只有表單控件回發一個值('DisplayFor()'不會創建表單控件)。但是對於'record_time',你根本不應該有一個表單控制 - 你只需在控制器中設置,然後再保存數據。至於'user_id' - 如果你不想編輯它,那麼它應該是一個隱藏的輸入 –

+0

@StephenMuecke,非常感謝。偉大的建議,以保存在HttpPost行動。我相應地糾正了,現在它完美了。 – SWA

回答

1

表單只提交其表單控件的名稱/值對(input,select,textarea)並且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(假設它是創建記錄的日期)也沒有意義(它尚未創建)。

+0

我同意它。我做了更正,從視圖中刪除日期,並只在HttpPost操作中分配它。另外感謝日期格式化選項,第二個是我現在可以使用的,直到我從生成的類移動到視圖模型,因爲更新數據庫類將擦除修改。 – SWA

相關問題