2010-07-23 50 views
0

我想以正確的方式使用Linq和強類型視圖。在現階段,我做到以下幾點:如何使用Linq對象驗證MVC中的視圖2

做一個模型來驗證agianst:

public class Menu 
    { 
     public int Id { get; private set; } 
     public string Text { get; private set; } 
     public string Action { get; private set; } 
     public string Controller { get; private set; } 
     public string Parameter { get; private set; } 
     public string Langue { get; private set; } 

     public Menu(int id, string controller, string action, string parameter, string text) 
     { 
      Id = id; 
      Controller = controller; 
      Action = action; 
      Text = text; 
      Parameter = parameter; 
     } 

使用LINQ從數據庫中獲取數據到模型:

public static List<Menu> GetTabListForMenu(string langue) 
{ 
    Page_dbEntities entity = new Page_dbEntities(); 


    var tabList = (from ml in entity.wpmenulangue 
        where ml.Langue == langue 
        from m in entity.wpmenu 
        where ml.Menu == m.Id 
        from l in entity.wplangue 
        where ml.Langue == l.Langue 
        from p in entity.wppage 
        where p.Id == m.Page 
        select new { m.Id, p.Controller, p.Action, p.Parameter, ml.Text}).ToList(); 

    List<Menu> menu = new List<Menu>(); 
    foreach (var item in tabList) 
    { 
     menu.Add(new Menu(item.Id, item.Controller, item.Action, item.Parameter, item.Text)); 
    } 
    return menu; 
} 

我非常相信,這是不這樣做,有2個問題的最佳途徑:

  1. 當我從我第一次使用VAR,然後有將其移動到在foreach對象數據庫中的數據。這似乎是浪費我的時間和更少的有效性,然後用sql來獲取它。

  2. 有人告訴我,我可以只驗證了agianst的entitymodel。即使我在視圖中使用多個實體。這是真的? (一個人告訴我這不能讓它工作,我一直沒能在網上找到任何有關它的東西)。

我會盡量在接下來的幾個小時回顧這篇文章,但可能需要等待24小時。

回答

1
public static List<Menu> GetTabListForMenu(string langue) 
{ 
    Page_dbEntities entity = new Page_dbEntities(); 
    return (from ml in entity.wpmenulangue 
      where ml.Langue == langue 
      from m in entity.wpmenu 
      where ml.Menu == m.Id 
      from l in entity.wplangue 
      where ml.Langue == l.Langue 
      from p in entity.wppage 
      where p.Id == m.Page 
      select new Menu(m.Id, p.Controller, p.Action, p.Parameter, ml.Text) 
    ).ToList(); 
} 

至於驗證,你不應該在視圖中使用多個實體。你應該使用一個叫做ViewModel的實體。此ViewModel是一個表示視圖上的數據的類。如果您使用DataAnnotations進行驗證,則可以使用指示如何驗證的屬性來修飾此視圖模型屬性。

+0

已經試過了;)它提供了以下錯誤: 只有參數構造函數初始化和LINQ中支持到實體。 THX的鏈接DataAnnotations雖然,我還需要就如何使probber驗證:) – Jorn 2010-07-23 07:54:46

+0

您需要爲您的視圖模型默認的構造函數讀取了。在你的情況下,Menu類構造函數帶參數。您將需要刪除此構造函數並使用C#3.0類初始化器語法初始化類。 – 2010-07-23 08:00:43

+0

謝謝,這解決了我的問題:) – Jorn 2010-07-23 09:42:16