Mvc DropDownlist用剃刀分隔问题

时间:2013-08-06 11:10:43

标签: asp.net-mvc razor html-select

这是我用来绑定我的下拉列表的代码,razor最后期待;,如下所述

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

但是当下拉文件呈现时,我的下拉菜单中的;就会显示在

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

我做错了吗?

1 个答案:

答案 0 :(得分: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)