Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC中的WebGrid内的@Html.DropDownList中绑定ViewBag_C#_Asp.net Mvc_Drop Down Menu_Webgrid - Fatal编程技术网

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

C# 在MVC中的WebGrid内的@Html.DropDownList中绑定ViewBag,c#,asp.net-mvc,drop-down-menu,webgrid,C#,Asp.net Mvc,Drop Down Menu,Webgrid,从上周开始,我读了很多帖子,但是没有关于我的问题 我有一个简单的控制器: public class HomeController : Controller { private AdventureWorks2014Entities db = new AdventureWorks2014Entities(); public ActionResult Index() { var model = db.Products.ToList(); Vie

从上周开始,我读了很多帖子,但是没有关于我的问题

我有一个简单的控制器:

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")
    )
)
但是我想添加@item.Name来显示默认字符串,这就是问题所在,@HTML.DropDownList中的@(at符号)不起作用,它不是黄色的,这就像关闭一样,因为行的开头的@与我在开头发布的一样


你知道如何在不创建新的选择列表(诸如此类)的情况下解决这个问题吗?只需将@item.Name转换为字符串?

在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")
    )
)
@grid.GetHtml(
列:grid.columns(
grid.Column(“ProductID”),
grid.Column(“名称”,null,格式:
@
grid.Column(“名称”,null,格式:
@
@{
字符串名称=(@item.name).ToString();
@DropDownList(“Products”,null,name,new{style=“color:red;”});
}
),
),
网格栏(“标价”、“价格”)
)
)

我必须用@item.Name创建一个新字符串,仅此而已!!!ufff我看到很多帖子,人们在那里创建了一个视图包,后来在下拉列表中创建了一个新的列表,这是没有意义的…好吧,这就是答案

您不需要at,因为您已经在一个代码块中。@ErikFunkenbusch,我很久以前就尝试过了,但它不起作用:编译器错误消息:CS1973:“System.Web.Mvc.HtmlHelper”没有名为“DropDownList”的适用方法,但似乎有一个名为“DropDownList”的扩展方法。无法动态调度扩展方法。考虑在不使用扩展方法语法的情况下强制转换动态参数或调用扩展方法。就像我说的,我尝试了很多东西,但都不管用。您不能在这样的辅助对象中使用动态。在它前面放一个@不会改变任何事情。您需要先将该值复制到局部变量,然后在助手中使用该局部变量。
@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")
    )
)