Asp.net mvc 如何在MVC2中使用Linq对象验证视图
我希望以正确的方式使用Linq和强类型视图。目前,我做了以下工作: 制作模型以验证agianst: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
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));
}
返回菜单;
}
我非常确信这不是最好的方法,我有两个问题:
公共静态列表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类初始值设定项语法初始化类。