我是MVC3的新手,我仍然試圖抓住良好的編程習慣。我有一段時間試圖格式化日期時間?顯示在我的MVC3項目中,該項目沒有與日期來自的類相關聯的顯式ModelName.cs文件。MVC3格式可爲空TextBoxFor中的DateTime而不更改模型
我們已經有了一個數據庫,並使用一個.edmx(我們稱之爲Pooling.edmx)來獲取我們的模型。我顯然不想編輯設計器文件以適應這種廣泛接受的解決方案:Date only from TextBoxFor()。
然後,我試過其他的解決方案,我發現這裏:它採用Using Html.TextBoxFor with class and custom property (MVC)
:
@Html.TextBoxFor(m => m.Name, new { data_bind="value: Name", @class = "title width-7" })
這個工作,因爲我是能夠使用自定義屬性,加類名,並設置一個值都在一旦。
我轉變了這個:
@Html.TextBoxFor(m => Model.PrePoolOwner.OglDateEffective, new Dictionary<string, object> { { "class", "check-dirty input-small datePicker" }, { "data-original-value", @Model.PrePoolOwner.OglDateEffective } })
到這個(這似乎真難看......並導致我的問題):
@Html.TextBoxFor(m => Model.PrePoolOwner.OglDateEffective, new { data_original_value = Model.PrePoolOwner.OglDateEffective.HasValue ? Model.PrePoolOwner.OglDateEffective.Value.ToString("MM/dd/yyyy") : null, @class = "datePicker check-dirty", @Value = Model.PrePoolOwner.OglDateEffective.HasValue ? Model.PrePoolOwner.OglDateEffective.Value.ToString("MM/dd/yyyy") : null })
是更好地找到並使用這些其他方式(如下劃線將轉換成破折號等)來顯示信息,或者我應該有一個ModelName.cs文件來改變它在模型級別的顯示方式嗎?
出於某種原因,我覺得有一個巨大的Pooling.edmx文件,映射出我們的數據庫,現在限制了我們,並且將來我們將如何隨着網站的發展訪問/呈現/更改數據。
爲了得到這是由Model.PrePoolOwner.OglDateEffective調用上面一個「PrePoolOwner」對象,我們有一個PrePoolOwnerRow.cs文件的作用:
namespace OCC_Tracker.Models
{
public class PrePoolOwnerRow
{
public bool Dirty { get; set; }
public bool Delete { get; set; }
public PrePoolOwner PrePoolOwner { get; set; }
public PrePoolOwnerRow(PrePoolOwner owner)
{
this.Dirty = false;
this.Delete = false;
this.PrePoolOwner = owner;
}
public PrePoolOwnerRow()
{ }
}
}
然後,我們在我們的.cshtml頂部調用文件
@model OCC_Tracker.Models.PrePoolOwnerRow
您是否將視圖綁定到.edmx模型?如果是這樣,你不應該這樣做 - 總是創建視圖模型綁定到你的MVC視圖。 –
是的,聽起來像你將視圖綁定到域/實體模型。您應該在MVC項目中設置單獨的視圖模型,然後將您的域/實體模型映射到視圖模型。 –
閱讀[本文](http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/)幫助我理解視圖模型與領域模型。 –