Mvc DropDownlist与剃须刀的分号问题



这是我用来绑定下拉列表的代码,razor在末尾期望;,如下所述

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

但当下拉菜单被渲染时,我在UI 中的下拉菜单旁边会得到;

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

我做错什么了吗?

您没有在此代码段中呈现任何下拉列表。您所要做的就是为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)

最新更新