0

这是我用来绑定我的下拉菜单的代码,剃须刀期待;在最后,如下所述

@{
   ViewBag.test = Model.Sample.Select(o => new SelectListItem
   {
    Text = o.Name,
    Value = o.sampleId.ToString()
   }
   );
   }

但是当下拉呈现时;,我在 UI 中的下拉旁边

如果我删除分号,则会出现黄屏编译错误

难道我做错了什么?

4

1 回答 1

3

您没有在此代码段中呈现任何下拉菜单。您所做的就是为 分配一个值ViewBag.test,是的,最后应该有一个;有效的 C# 代码:

@{
    ViewBag.test = Model.Sample.Select(o => new SelectListItem
    {
        Value = o.sampleId.ToString(),
        Text = o.Name,
    });
}

你应该做的是删除;你最有可能在@Html.DropDownList助手调用后留下的。

还要记住,ViewBag在视图中设置值是不好的做法。使用ViewBag是不好的做法,但这是另一回事(见下文)。你应该做的是在渲染视图的控制器动作中分配这个值。获取数据不是视图的责任。视图的职责是以强类型视图模型的形式显示发送给它的数据,该视图模型是在控制器操作中创建的。

回顾一下:

您首先编写一个视图模型:

public class MyViewModel
{
    public string SelectedValue { get; set; }
    public IEnumerable<SelectListItem> Items { get; set; }
}

然后是一个控制器动作填充这个视图模型并将其传递给视图:

public ActionResult SomeAction()
{
    IEnumerable<SomeDomainModel> data = ... hit your DAL to retrieve the model

    // Now build a view model
    var model = new MyViewModel();
    model.Items = data.Select(o => new SelectListItem
    {
        Value = o.sampleId.ToString(),
        Text = o.Name,
    });

    // pass the view model to the view
    return View(model);
}

最后你有一个对应于你之前设计的视图模型的强类型视图:

@model MyViewModel
...
@Html.DropDownListFor(x => x.SelectedValue, Model.Items)
于 2013-08-06T11:14:54.433 回答