2011-10-26 33 views
0

現在,我意識到這個問題已經回答過了,但我不能彎曲我的頭圍繞它,讓它在我的示例工作:MVC處理多個LINQ查詢在一個單一的視圖

查看
應該包含2 foreach循環FX
的foreach(在Model.ListA VAR項)
的foreach(在Model.ListB VAR項)

模型
應包含一類具有一個LinqDataCo ntext對象和兩個屬性:(ListA和ListB)

控制器
應該通過視圖模型。


模型和控制器對此會如何看待實現這一目標? 一些簡單的代碼例子將是很有益:)

回答

1

你得有點落後。你的數據上下文應該在控制器中(最好在控制器使用的更低層)。你總是希望你的控制器負責獲取/更新數據,並填充模型。然後,將模型傳送到視圖中,並提供呈現該數據所需的所有內容。

public class MyModel 
{ 
    public List<ListAEntity> ListA {get;set;} 
    public List<ListBEntity> ListB {get;set;} 
} 


public class HomeController : Controller 
{ 
    private readonly MyDataContext _context = new MyDataContext(); 

    public ActionResult Index() 
    { 
     var model = new MyModel() 
     { 
      ListA = _context.Get<ListAEntity>().ToList(), 
      ListB = _context.Get<ListBEntity>().ToList() 
     }; 

     return View(model); 
    } 
} 
+0

謝謝兩位!真正的幫助,嚴我已經斌告訴了幾次,有時它只是讓我惱火,我不能重用queryies當我在控制器讓他們! – BjarkeCK

1

哇,將LinqDataContext填充到視圖的氣味很差。爲什麼要這麼做?

控制器應該從LinqDataContext或後端服務獲取所需的所有數據,然後創建一個僅包含IList或IEnumerable的簡單ViewModel。

public class YourViewModel 
{ 
    public List<A> ListA {get; set;} 
    public List<B> ListB {get; set;} 
} 

public ActionResult YourControllerAction() 
{ 
    var context = yourDataContext; 

    var model = new YourViewModel 
    { 
     ListA = context.TableA.Where(x => x.Something) 
        .Select(x => x.ConvertSqlToBusinessObject()).ToList(), 
     ListB = context.TableB.Where(x => x.Something) 
        .Select(x => x.ConvertSqlToBusinessObject()).ToList() 
    }; 

    return View("Index",model); 
} 
+0

感謝你,是輝煌的,會仔細看! 怎麼回事我是通過兩個表將循環從一個看法?我可以做 [[ViewData [「linq」] =從d中的c ...]] 但這不會給我intellesence – BjarkeCK

+0

看起來如果我不使用lambda表達式?我不知道他們是如何工作的,所以我會使用我所知道的! – BjarkeCK

+0

@user scottm本質上有一個不使用lambda的解決方案。 –

0

我想補充一個小除了以前的答案:控制器應採取必要選擇適當的視圖,視圖模型邏輯,但它不應該填充視圖模型。視圖模型完全能夠自行填充。

這種模式提高了控制器和兩個視圖模型以及創建問題之間的清潔器分界的封裝。因此,如果我偷邁克爾的代碼片段:

在控制器

public ActionResult YourControllerAction(){ 
    MyDbContext context = new MyDbContext(); 
    return View("YourControllerAction", new YourViewModel(context)); 
} 

在視圖模型

public class YourControllerAction { 
    public YourControllerAction(MyDbContext context) { 
     ListA = context.TableA.Where(x => x.Something).Select(x => x.ConvertSqlToBusinessObject()).ToList(); 
     ListB = context.TableB.Where(x => x.Something).Select(x => x.ConvertSqlToBusinessObject()).ToList(); 
    } 
}