将值传递给mvc视图中的下拉列表

时间:2009-12-28 21:03:38

标签: c# asp.net-mvc drop-down-menu viewdata

我是MVC编程的新手。我将值从其他数据库表传递到我的编辑和创建视图以填充一些下拉列表。它工作得很好。我在我的控制器中有这样的代码用于编辑和创建:

var db = new MyProgramDataContext(); 订单订单= orderRepository.GetOrder(id); ViewData [“customer”] =来自db.customers中的c                        选择新的SelectListItem                        {                               Text = c.customer_name,                               值= c.customer_name                        } return View(order);

我想将select语句移动到Respository以使事情变得更清晰,这样我就不会在Edit and Create中重复相同的选择。

ViewData [“customer”] = orderRepository.GetCustomers();

在Respository中,GetCustomers的返回类型应该是SelectListItem吗?我似乎无法让它发挥作用。

3 个答案:

答案 0 :(得分:1)

查看Rob Conery如何在他的博客上实现它:

http://blog.wekeroad.com/blog/asp-net-mvc-dropdownlist-and-html-attributes/

您可以获取所有客户,然后创建一个SelectList并相应地设置您的ViewData。

答案 1 :(得分:0)

尝试这种方式

在DDLHelper等辅助类上移动这种函数

<select id="idXYZ" name="XYZ">
  <%= DDLHelper.DDl_order(Model.orderId)%>
</select>

在DDLHelper

之类的辅助类中编写函数
    public static string DDl_order(int orderId)
        {
            string format = "<option value=\"{0}\" {2} >{1}</option>";
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            sb.AppendFormat(format, "", "--Select--", "");

            List<Models.UrClass> urclass=orderRepository.GetCustomers();

            foreach (var item in client)
            {
                string ordid = item.orderId.ToString().Encrypt();

                if (item.ClientID == orderId)
                    sb.AppendFormat(format, orderid , item.OrdName,selected=\"selected\"");
                else
                    sb.AppendFormat(format, ordid , item.OrdName, "");
            }
            return sb.ToString();
        }

答案 2 :(得分:0)

我现在将我的SelectLists放在FormViewModel类中,并使用部分视图进行编辑和创建代码。谢谢大家。