在 MVC 中的 WebGrid 内的 @Html.DropDownList 中绑定 ViewBag

Bind a ViewBag in an @Html.DropDownList inside of a WebGrid in MVC

自上周以来我阅读了很多帖子,但没有任何关于我的问题。

我有这个简单的控制器:

public class HomeController : Controller
{
    private AdventureWorks2014Entities db = new AdventureWorks2014Entities();

    public ActionResult Index()
    {
        var model = db.Products.ToList();
        ViewBag.Products = new SelectList(db.Products, "ProductID", "Name");
        return View(model);
    }
}

还有这个简单的视图:

@model IEnumerable<ADWork.Client.Models.Product>

@{
    var grid = new WebGrid(Model);
}

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column("ProductID"),
        grid.Column("Name", null, format:@<span>@Html.DropDownList("Products", @item.Name, new { style = "color:red;" }) </span>),
            grid.Column("ListPrice", "Price")
    )
)

现在的问题是 DropDownList。我可以像这样很容易地渲染它:

 @Html.DropDownList("Products", null , new { style = "color:red;" }) 

但我想添加 @item.Name 以显示默认字符串,这就是问题所在,@HTML.DropDownList 内的 @(at 符号)不起作用,它不是黄色,就像关闭一样,因为行首的 @ 就像我在开头发布的那样。

知道如何在不创建新的 SelectList 的情况下解决这个问题吗(blah blah),只需将 @item.Name 转换为 String?

经过 6 天的反复尝试找到解决方案!!!!!!!!!!!!

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column("ProductID"),
        grid.Column("Name", null, format:
            @<span>
               grid.Column("Name", null, format:
@<span>
    @{
            string name = (@item.Name).ToString();
            @Html.DropDownList("Products", null, name , new { style = "color:red;" });
    }
</span>),
           </span>),
            grid.Column("ListPrice", "Price")
    )
)

我必须用@item.Name 创建一个新字符串,仅此而已!!!呵呵,我看到很多 post 人们在其中创建 ViewBag,然后在 DropDOwnList 中创建一个新列表,这没有意义......这就是答案!!!