【问题标题】:use Razor to fill dropdown with Linq2Sql data使用 Razor 用 Linq2Sql 数据填充下拉列表
【发布时间】:2011-12-01 13:06:41
【问题描述】:

我正在尝试使用 ASP.NET MVC3,并想简单地用我从 LINQ2SQL 类中获得的数据填充一个下拉列表,就像这样

控制器(我知道,Linq 不属于控制器)

var allUsers = (from u in _userDataContext.Users
                            select u).ToList();
            ViewBag.allUsers = allUsers.ToList();
            return View();

查看:

<select id="drop_heroes">
        @foreach (var u in ViewBag.allUsers)
        { 
            <option value="@u.pk_userid">@u.email</option>
        }
    </select>

That works fine, but I would like to use Razor @Html.Dropdownlist to create the same dropdown list, but can't find any info to make this work with Linq data. 

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    我知道,Linq 不属于控制器

    那你为什么在控制器中使用它?无论如何,至少你知道它很好。

    这是一个例子。与往常一样,在 ASP.NET MVC 应用程序中,您首先定义一个视图模型,该模型将表示您在视图中需要的数据。因此,在您的情况下,您需要显示一个下拉列表,以便定义用户列表和选定的用户 ID:

    public class MyViewModel
    {
        public string SelectedUserId { get; set; }
        public IEnumerable<SelectListItem> Users { get; set; }
    }
    

    然后您定义一个控制器操作,该操作将从您的存储库中填充此视图模型并将其处理到视图:

    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Users = _userDataContext.Users.ToList().Select(x => new SelectListItem
            {
                Value = x.pk_userid.ToString(),
                Text = x.email
            })
        }
        return View(model);
    }
    

    最后,您将拥有一个视图,该视图将被强类型化到您的视图模型中,并使用 HTML 助手生成下拉列表:

    @model MyViewModel
    @using (Html.BeginForm())
    {
        @Html.DropDownListFor(x => x.SelectedUserId, Model.Users)
        <button type="submit">OK</button>
    }
    

    注意事项:

    • 视图模型的使用
    • 强类型视图的使用
    • 使用强类型 HTML 帮助器生成标记,例如表单元素和输入字段
    • 摆脱弱类型结构,例如 ViewBag

    如果您遵循这些简单的规则,您会发现作为 ASP.NET MVC 开发人员的生活将会变得多么轻松。

    【讨论】:

    • 感谢 Darin,我在控制器中使用 linq,就像 microsoft 本身一样,只是为了让一个快速示例运行。我的循环方式是一种好的做法,还是您建议使用更复杂且(在我看来)对设计人员不太友好的使用 @ Razor 语法的解决方案?
    • @Jorre,您的循环示例是非常糟糕的做法,应替换为 Html.DropDownListFor 助手。不仅你的代码会变得更短,而且它会被强类型化到你的视图模型中,它会为下拉列表生成正确的名称,这样默认的模型绑定器就能够更容易地在你的 POST 操作中绑定选择值。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-01
    • 1970-01-01
    • 2019-04-09
    • 2019-07-23
    • 1970-01-01
    • 2014-08-27
    • 1970-01-01
    相关资源
    最近更新 更多