我有一个常量值,例如“必需”,“可选”和“隐藏”。我希望这个在下拉列表中绑定。到目前为止,我所做的是下面的代码,这是在视图中编码。将常量值绑定到下拉列表的最佳方法是什么?我想在控制器中实现它并在视图中调用它。
@{
var dropdownList = new List<KeyValuePair<int, string>> { new KeyValuePair<int, string>(0, "Required"), new KeyValuePair<int, string>(1, "Optional"), new KeyValuePair<int, string>(2, "Hidden") };
var selectList = new SelectList(dropdownList, "key", "value", 0);
}
将下拉列表中的selectList绑定
@Html.DropDownListFor(model => model.EM_ReqTitle, selectList)
答案 0 :(得分:1)
根据属性EM_RegTitle
来判断我猜测你正在使用的模型是以某种方式从数据库自动生成的。也许是实体框架?如果是这种情况,那么您应该能够在与ORM / Entity Framework实体相同的命名空间中创建一个部分类,并添加额外的属性。类似的东西:
public partial class MyModel
{
public SelectList MyConstantValues { get; set; }
}
然后,您可以将SelectList
与模型的其余部分一起传递。
在MVC应用程序中使用ORM / EF实体通常会出现挂断,虽然在线代码示例中看起来很容易,但我建议您创建自己的View Model类并使用AutoMapper之类的东西来填充这些视图。这样,您只传递视图所需的数据,并且避免传递数据库行,该行可能包含您不希望用户查看或更改的其他敏感信息。
您还可以移动逻辑以生成静态值选择列表到域模型或服务类中,以帮助减少控制器中的代码量和混乱。
希望这会以某种方式帮助你!
示例...
您的视图模型(将其放在“模型”目录中):
public class MyViewModel
{
public SelectList RegTitleSelectList { get; set; }
public int RegTitle { get; set; }
}
您的控制器(进入“控制器”目录):
public class SimpleController : Controller
{
MyViewModel model = new MyViewModel();
model.RegTitle = myEfModelLoadedFromTheDb.EM_RegTitle;
model.RegTitleSelectList = // Code goes here to populate the select list.
return View(model);
}
现在右键单击编辑器中的SimpleController
班级名称,然后选择“添加视图...”。
创建一个新视图,勾选强类型,然后选择您的MyViewModel
类作为模型类。
现在编辑视图并执行与您之前在代码中执行的操作类似的操作。您会注意到视图顶部现在应该有@model
行。这表示您的视图是强类型视图,并使用MyViewModel
模型。
如果你遇到困难,网上有大量的例子可以获得MVC和强类型视图的基础知识。
答案 1 :(得分:0)
您更喜欢视图模型并使用控制器中的数据填充它。
class MyViewModel
{
public string ReqTitle { get; set; }
public SelectList SelectListItems { get; set; }
}
然后你可以使用:
@Html.DropDownListFor(model => model.EM_ReqTitle, model.SelectListItems)