Asp.net MVC2:我的mvc应用程序中有很多下拉列表。首先,我开始为每个创建一个具有唯一ID和名称的表,并在控制器和视图中引用它们。应用程序变大了,建议我使用查找表,其中包含lookuptype和lookupvalue作为复合主键,并填充其中下拉列表的所有值。我看过整个互联网,mvc使用的唯一方法是每个下拉列表一个表!有人可以向我解释我是如何实现它的,并且请详细说明请原谅我完全迷失了。指向教程的链接也很棒。 我正在使用vb.net和linq来使用sql。
答案 0 :(得分:0)
假设您的表格包含ID
,Name
和Value
列。现在,通过只有一个表可能看起来像这样的表:
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
与你所做的相似,但也许更全面。