SQL查询显示在视图而不是其结果上

时间:2013-02-17 17:19:14

标签: asp.net-mvc-4

在HomeController.cs中,我有以下代码段

   public ActionResult Index()
    {
        var context = new DataClassesContext();
        var regionBoudaries = from boundaryDetails in context.RegionBoundaries
                              join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
                              select new { boundaryDetails.lat, boundaryDetails.@long, boundaryID.RegionID };
        ViewData["RegionBoudaries"] = regionBoudaries;
        return View();
    }

在我写的视图文件中

 <%= ViewData["RegionBoudaries"] %>

我将整个LINQ查询翻译成SQL语言,而不是查询的结果。你能帮我查一下查询结果吗?谢谢

1 个答案:

答案 0 :(得分:3)

确定您需要执行查询:

 ViewData["RegionBoudaries"] = regionBoudaries.ToList();

但是我可以看到你正在使用一个匿名对象,这会使得很难在视图中访问。所以我建议你定义一个模型:

public class RegionViewModel
{
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public int RegionID { get; set; }
}

然后调整您的查询:

var context = new DataClassesContext();
var regionBoudaries = 
    from boundaryDetails in context.RegionBoundaries
    join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
    select new RegionViewModel
    {
        Latitude = boundaryDetails.lat, 
        Longitude = boundaryDetails.@long, 
        RegionID = boundaryID.RegionID 
    };

改进代码的下一步当然是摆脱这个ViewData废话并充分利用您定义的视图模型并在视图中强力输入:

public ActionResult Index()
{
    using (var context = new DataClassesContext())
    {
        var regionBoudaries = 
            from boundaryDetails in context.RegionBoundaries
            join boundaryID in context.Region_Boundaries on boundaryDetails.RegionBoundaryID equals boundaryID.BoundaryID
            select new RegionViewModel
            {
                Latitude = boundaryDetails.lat, 
                Longitude = boundaryDetails.@long, 
                RegionID = boundaryID.RegionID 
            };
        return View(regionBoudaries.ToList());
    }
}

现在您的视图将成为视图模型的强类型:

<%@ Page 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewPage<IEnumerable<RegionViewModel>>" 
%>

现在你得到了强大的输入和Intellisense:

<% foreach (var region in Model) { %>
    <div>
        Lat: <%: region.Latitude %>, Lon: <%: region.Longitude %>
    </div>
<% } %>
相关问题