如何在mvc框架中实现查找表?

时间:2011-01-25 08:32:03

标签: linq-to-sql asp.net-mvc-2 lookup

Asp.net MVC2:我的mvc应用程序中有很多下拉列表。首先,我开始为每个创建一个具有唯一ID和名称的表,并在控制器和视图中引用它们。应用程序变大了,建议我使用查找表,其中包含lookuptype和lookupvalue作为复合主键,并填充其中下拉列表的所有值。我看过整个互联网,mvc使用的唯一方法是每个下拉列表一个表!有人可以向我解释我是如何实现它的,并且请详细说明请原谅我完全迷失了。指向教程的链接也很棒。 我正在使用vb.net和linq来使用sql。

3 个答案:

答案 0 :(得分:0)

假设您的表格包含IDNameValue列。现在,通过只有一个表可能看起来像这样的表:

create table Lookup
(
    LookupID int not null identity
        primary key,
    LookupTypeID int not null
        references LookupType(LookupTypeID),
    Name nvarchar(50) not null,
    Value int not null,
    unique(EnumTypeID, Name)
)
go

此表将确保在相同类型名称内不发生冲突。

反正。你当然可以有一个类似的应用程序(而不是数据)模型类

public class EnumValue
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [Required]
    public int Value { get; set; }
}

因此,每当您获得某种类型的值时,您始终可以生成IList<EnumValue>个值并将其提供给特定的下拉列表。

由于您没有提供任何有价值的数据,因此该表和类可以省略列/属性Value,因为根据内部工作原理,它可能根本不需要。但您最了解这一点,因为您了解自己的应用要求。而不是这个列/属性只有ID可以做到这一点。

答案 1 :(得分:0)

我实际上使用了稍微不同的方法。我创建了一个具有复合主键LookupName和LookupValue的表。然后在datacontext中我声明了一个方法,该方法将lookupname作为参数,然后带来一个lookupname,其lookupname与此参数匹配。在原始表(ex.Contact)中,我创建了一个名为status的字段,其中将保存所选的值。然后在控制器中,我使用viewdata创建下拉列表。

示例:_db表示datacontext

Viewdata('Status')=新选择列表(_db.Getlookupname('status'),'lookupname','lookupname')

然后在视图中

html.dropdownlist( '状态')

我还将下拉列表命名为与目标表“联系人”中找到的相同字段名称“status”。

它有效,没有任何复杂性或错误。 谢谢您的帮助。我希望这对其他人有帮助!

答案 2 :(得分:0)

这是一个关于如何实现通用查找服务的教程。

http://wtfperminute.blogspot.com/2011/02/working-with-reference-data-lookups.html

与你所做的相似,但也许更全面。