我应该将选择列表数据发送到视图还是让它自己获取数据?

时间:2011-11-13 13:03:31

标签: asp.net-mvc asp.net-mvc-3

我的控制器中有一个create方法,这会打开一个视图。在视图上,用户可以输入数据来填充模型。其中一些数据来自选择列表。这些选择列表从数据库中填充。

我想知道的是我应该:

a)获取控制器中选择列表的数据,填充如下字段:

public IEnumerable<SelectListItem> Statuses { get { return GetStatusType(); } }

将状态传递给模型,然后执行for()循环遍历状态并创建选择列表和选项HTML

b)在控制器和视图中什么也不做,模型中有以下内容:

<select id="Q_StatusID" name="Q.StatusID">@Html.Raw(
SelectHelper.Status(false, @Model.PageMeta.StatusID))</select>

SelectHelper是C#代码,它获取所有选择列表和选项HTML。

c)更好的方法:

3 个答案:

答案 0 :(得分:0)

我会选择第一个。像这样的事情

辅助方法

   public List<SelectListItem> getAllSelectList(List<Items> lists)
            {
                List<SelectListItem> selectListItems = new List<SelectListItem>();
                foreach (Term term in lists)
                {
                    selectListItems.Add(new SelectListItem() { Text = term.yourselectfield, Value = term.your value });

                }
                return selectListItems;
            }
控制器上的

//假设您GetStatusType()方法将返回对象列表

ViewData.selectlist=getAllSelectList(GetStatusType());

在您的视图中,如果您使用的是Razor

@Html.DropDownList("selectlist", null, "Choose")

<%: Html.DropDownList("selectlist", null, "Choose") %>

答案 1 :(得分:0)

  1. 创建一个静态查找类&amp;那里的GetStatusType的静态方法。
  2. 首次从数据库加载后缓存所有状态类型。
  3. 从视图中调用GetAllStatusType进行显示。

答案 2 :(得分:0)

我会创建一个视图模型,它具有IEnumerable&lt;状态&gt;属性。然后在您的视图中显示选择元素:

@Html.DropDownListFor(model => model.PageMeta.StatusID, new SelectList(Model.Statuses, "Id", "Name"), "Some default which has no value")

其中Id和Name设置为Statuses模型中的相应属性。