2012-03-19 51 views
0

我试图从控制器操作方法中获得以下结果给部分视图。通常我只是在页面顶部使用模型和参考。但是我认为“结果”是不同的,因为它来自LINQ to SQL,并且不知道如何在视图中引用,所以我可以用它遍历结果来显示。如何从LINQ to SQL查询获得结果到局部视图?

 [HttpGet] 
    public PartialViewResult SelectUnits() 
    { 

     var results = (from stats in db.t_harvest  
         orderby stats.unit_number      
         select new 
         { 
          stats.unit_number, 

         }).Distinct().ToList(); 


     return PartialView(results); 
    } 

回答

1

不能使用强类型,因为返回列表中的部分是匿名类型(IE:new { ... })。

但是,由于您只返回1个值,因此不需要它。

var results = (from stats in db.t_harvest  
       orderby stats.unit_number      
       select stats.unit_number).Distinct().ToList(); 

return PartialView(results); 

因此,如果unit_number是一个int,那么使您的部分视图模型为IEnumerable<int>

如果您确实需要发回匿名类型,请将您的部分视图模型设置为dynamic

正如提醒一句,小心dynamic(和ViewBag,这也是dynamic),因为语法错误(如访问它的属性,当O型)将在运行被抓,而不是编译时间。出于这个原因,我个人更喜欢在适用的情况下强制输入视图


有3种方式,你可以将数据传递到您的视图:

ViewData["SomeName"] = 12345; 
ViewBag.SomeName = 12345; // MVC3+ 
ViewData.Model = 12345; // Same as doing: return PartialView(12345); 
0

这将返回匿名对象的列表,所以一种选择是使用动态对象(ViewBag)是已经各个视图中(如果您正在使用MVC3即是)

Here is a good article on ViewBag and ViewData访问它们,ViewData只是另一种可以将它传递给视图的方法。

这是粗糙的和未经考验,但我相信这应该工作:

Controller.cs

ViewBag.Results = results; 
return PartialView(); 

PartialView

@(foreach(var result in ViewBag.Results) 
    { 
    result.unit_number.ToString();//This line should print out the HTML 
    } 
) 
+0

此代码将工作,但它背后的解释是不正确。您*可以*通过模型将匿名类型传递回您的视图。没有区别,你可以使用ViewData [“”],ViewBag或模型。重要的是你在视图页面上指定了哪种类型的模型。 – Timeout 2012-03-19 03:00:39

+0

是的,我给出了一个如何将其传回的例子。我会更加明确一点。 – 2012-03-19 03:03:36