【问题标题】:LINQ in a method to use in _Layout.cshtmlLINQ 在 _Layout.cshtml 中使用的方法
【发布时间】:2011-10-01 14:15:30
【问题描述】:

我只是想从数据库中检索一些数据,并将其显示在 _Layouts.cshtml 文件中。我想在模型文件夹中的方法中执行此操作,对吗??

我下面的脚本可以运行,但它并不漂亮,看看。

这是我的模型:

namespace MvcBreakingNews.Models
{
public class ListCategories
    {
        public IList<string> arrTest() {
            IList<string> myList = new List<string>();
            DataClassesDataContext dt = new DataClassesDataContext();

            var q = from c in dt.categories select c;
            foreach (var item in q)
            {
                myList.Add(item.category1.ToString());
            }
                return myList;
            }
        }
    }
}

这是我的 _Layout.cshtml

@using MvcBreakingNews.Models
...

@{
   ListCategories objC = new ListCategories();

   foreach (var item in objC.arrTest())
   {
       <li><a href="#">@item</a></li>         
   }
}

现在我想做什么,或者我想我想做什么。就是去掉我方法中的foreach循环,直接将数组发送到_Layout.cshtml

我该怎么做?

【问题讨论】:

  • 你的意思是arrTest()中的foreach吗?

标签: c# asp.net-mvc asp.net-mvc-3 linq razor


【解决方案1】:

您可以使用ToList() extension method:

public IList<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    var q = from c in dt.categories
            select c.category1.ToString();

    return q.ToList();
}

或者您可以直接返回q,这需要更改返回类型:

public IQueryable<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    return from c in dt.categories
           select c.category1.ToString();
}

【讨论】:

  • 谢谢,但它们对我不起作用。两者都给了我同样的错误:“你不能隐式转换类型'blah blah'你错过了一个演员吗?但是朝那个方向的解决方案会很棒。
  • 抱歉,我忽略了您在 foreach 中的代码。查看更新的答案。
  • 酷这个工作!非常感谢你!最后一个问题,如果我想选择多个表格单元格怎么办?
  • 你的意思是多列?您可以从 arrTest 方法返回整个类别对象并在您的 cshtml 文件中访问它。
  • 啊,是的!列,对不起。希望你不介意我问!但那看起来如何:)? ` ------ public DataClassesDataContext arrrTest() { DataClassesDataContext dt = new DataClassesDataContext();返回 dt; } ---------布局:----- ListCategories objC = new ListCategories(); var q = from c in objC.arrrTest().categories select c; -----`女巫不工作:(
【解决方案2】:

实现这一点的最佳方法是创建一个BaseController 并使您的所有控制器都派生自该 BaseController。

您的新BaseController 所做的是每次都传递一个模型。我希望你明白了。

这是一个很好的例子:

How to create a strongly typed master page using a base controller in ASP.NET MVC

【讨论】:

  • 奥赫。试图围绕这个想法和例子来思考。我认为我会从更简单的解决方案开始,但我会回到这个!谢谢。
  • @user973485 您的解决方案非常适合快速完成工作,但它不支持关注点分离的想法。你的观点不应该关心数据来自哪里。它应该只关心如何格式化和输出它。
【解决方案3】:

使用 Lembda 表达式执行相同操作的最短方法如下。

public IList<string> arrTest()
{
    DataClassesDataContext dt = new DataClassesDataContext();

    return dt.categories.select(c=>c.category1.ToString()).ToList();
}

【讨论】:

    猜你喜欢
    • 2022-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多