我想弄清楚使用ASP.NET MVC從單個頁面獲取許多用戶選擇和輸入的更好方式或模式。MVC中的許多字段維護
問題:我有一個頁面上的許多輸入字段,我需要它們的值存儲在數據庫中。
這是我的嘗試: 我有一個單頁面,有一些局部視圖。有了部分觀點,我可以稍微分解一下。
爲了論證的緣故,我在頁面上有50個字段。其中一些是下拉式列表,一些是文本輸入字段,另一些是複選框。每個值都作爲一行存儲在數據庫中,並可通過唯一的業務密鑰訪問。
例如,在代碼中使用實體框架的訪問我的數據訪問實體時:
//Grouping of settings for a particular user
var allSettingsForThisUser = myDbContext.USER_SETTINGS_MODEL.Where(u => u.USER_ID == userId);
//Unique settings for a user
var setting1 = allSettingsForThisUser.USER_SETTINGS_MODEL.Where(x => x.BUSINESS_KEY.Equals("FIELD1")).First();
var setting2 = allSettingsForThisUser.USER_SETTINGS_MODEL.Where(x => x.BUSINESS_KEY.Equals("FIELD2")).First();
var setting3 = allSettingsForThisUser.USER_SETTINGS_MODEL.Where(x => x.BUSINESS_KEY.Equals("FIELD3")).First();
..
我已經建立了視圖模型來保持屏幕上的每個設置在特定的地方。
我的視圖模型是這樣的:
public class MyViewModel
{
//Strongly typed fields for my view
public USER_SETTINGS_MODEL OrganizationType { get; set; }
public USER_SETTINGS_MODEL BookletsRequired { get; set; }
public USER_SETTINGS_MODEL HasGreenPants { get; set; }
public USER_SETTINGS_MODEL MiddleName { get; set; }
...
}
這樣,我做的事情似乎並不高效。因此,對於每個字段,我需要通過特定的業務鍵來查詢數據庫。然後,我需要將其分配給特定的USER_SETTINGS_MODEL強類型字段。
我已經嘗試使用視圖模型與實體的集合。在我看來,我然後在WHERE條件中使用商業密鑰中的Linq查詢傳遞。結果是一個非常複雜的觀點。
我的問題是,有沒有更好的方法?一個更好的模式?
總結: - 很多領域的捕獲和保存 - 場被放置在特定的地方畫面 上 - 有些字段輸入框,某些下拉列表,一些複選框 - 我使用ASP.NET MVC5,實體框架,LINQ和數據連接的版本庫模式
感謝
我想你的問題是db設計。此評論「每個值都作爲一行存儲在數據庫中,並可通過唯一的業務密鑰訪問。」令我感到震驚。它應該是每個OranizationType(具有許多字段)存儲在一個表中,並通過主鍵等訪問... – CSharper
有點像一個表,有列ID,OrganizationType,BookletsRequired,HasGreenPants,MiddleName等我同意,但這意味着數據庫表中將存儲50列。如果我們添加一個字段,我們必須每次修改表格模式。 – c121hains
** C鋒利:**你是對的。這裏問題的根源是數據模型。我目前的數據模型通過一個非常廣泛的結構可以提供很大的靈活性。這是一個很大的代價,這使得在處理Entity Framework中的強類型值時處理起來非常具有挑戰性,特別是使得事情變得棘手。我決定將我的數據重構爲更好的模型。 – c121hains