Asp.net mvc 如何在MVC2中使用Linq对象验证视图

Asp.net mvc 如何在MVC2中使用Linq对象验证视图,asp.net-mvc,linq,Asp.net Mvc,Linq,我希望以正确的方式使用Linq和强类型视图。目前,我做了以下工作: 制作模型以验证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

我希望以正确的方式使用Linq和强类型视图。目前,我做了以下工作:

制作模型以验证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;
        }
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;
}
使用Linq将数据从数据库获取到模型中:

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;
        }
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;
}
公共静态列表GetTabListForMenu(字符串语言)
{
Page_dbEntities entity=新的Page_dbEntities();
var tabList=(来自entity.wpmenulangue中的ml)
其中ml.Langue==Langue
从entity.wp菜单中的m
其中ml.Menu==m.Id
从entity.wplange中的l开始
其中ml.Langue==l.Langue
从entity.wpp页面中的p
其中p.Id==m.Page
选择新的{m.Id,p.Controller,p.Action,p.Parameter,ml.Text}).ToList();
列表菜单=新建列表();
foreach(表格列表中的var项目)
{
添加(新菜单(item.Id、item.Controller、item.Action、item.Parameter、item.Text));
}
返回菜单;
}
我非常确信这不是最好的方法,我有两个问题:

  • 当我从数据库获取数据时,我首先使用var,然后必须使用foreach将其移动到对象。这似乎既浪费了我的时间,又不如使用sql获取它有效

  • 有人告诉我,我可以通过整个模型进行验证。即使我在视图中使用多个实体。这是真的吗?(那个告诉我这件事的人,我们无法让它工作,我也无法在网上找到任何关于它的信息)

  • 在接下来的几个小时内,我将尝试回顾这篇文章,但可能需要等待24小时。

    公共静态列表GetTabListForMenu(字符串语言)
    
    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();
    }
    
    { Page_dbEntities entity=新的Page_dbEntities(); 返回(来自entity.wpmenulangue中的ml) 其中ml.Langue==Langue 从entity.wp菜单中的m 其中ml.Menu==m.Id 从entity.wplange中的l开始 其中ml.Langue==l.Langue 从entity.wpp页面中的p 其中p.Id==m.Page 选择新菜单(m.Id、p.Controller、p.Action、p.Parameter、ml.Text) ).ToList(); }

    至于验证,您不应该在视图中使用多个实体。您应该使用一个称为ViewModel的实体。此ViewModel是一个表示视图上数据的类。如果要使用进行验证,则可以使用指示如何进行验证的属性装饰此视图模型属性。

    已经尝试过了;)它给出了以下错误:LINQ to实体中只支持无参数构造函数和初始值设定项。thx对于DataAnnotations的链接,我仍然需要阅读如何进行probber验证:)您需要为视图模型提供默认构造函数。在您的例子中,菜单类构造函数接受参数。您需要删除此构造函数并使用C#3.0类初始值设定项语法初始化类。