1

我有一个常量值,例如“必需”、“可选”和“隐藏”。我希望它绑定在下拉列表中。到目前为止,我所做的是下面的代码,这是在视图中编码的。将常量值绑定到下拉列表的最佳方法是什么?我想在控制器中实现它并在视图中调用它。

@{
    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); 

} 

在 Dropdownlist 中绑定 selectList

@Html.DropDownListFor(model => model.EM_ReqTitle, selectList)
4

2 回答 2

1

从属性来看,EM_RegTitle我猜测您使用的模型是以某种方式从数据库自动生成的。也许实体框架?如果是这种情况,那么您应该能够在与您的 ORM/Entity Framework 实体相同的命名空间中创建部分类并添加额外的属性。就像是:

public partial class MyModel
{
    public SelectList MyConstantValues { get; set; }
}

然后,您可以将您SelectList的模型与模型的其余部分一起传递。

在您的 MVC 应用程序的每一层中使用 ORM/EF 实体通常会出现问题,尽管在线代码示例中看起来很简单,但我建议您创建自己的 View Model 类并使用 AutoMapper 之类的东西来填充这些视图。这样,您只传递视图需要的数据,避免传递 DB 行,其中可能包含您不希望用户查看或更改的其他敏感信息。

您还可以将生成静态值选择列表的逻辑移动到域模型或服务类中,以帮助减少控制器中的代码量和混乱。

希望这对您有所帮助!

例子...

你的视图模型(把它放在你的“模型”目录中):

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 和强类型视图的基础知识。

于 2012-05-17T07:52:42.707 回答
0

您更喜欢查看模型并使用控制器中的数据填充它。

class MyViewModel
{
    public string ReqTitle { get; set; }
    public SelectList SelectListItems { get; set; }
}

然后你可以使用:

@Html.DropDownListFor(model => model.EM_ReqTitle, model.SelectListItems) 
于 2012-05-17T07:54:56.953 回答