将常量值绑定到视图中的最佳方法(MVC3)

时间:2012-05-17 07:04:10

标签: asp.net-mvc-3

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

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

2 个答案:

答案 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)