2015-01-31 3 views
0

Я читаю много сообщений с прошлой недели, но ничего не имею о моей проблеме.Bind a ViewBag в @ Html.DropDownList внутри WebGrid в 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, он не является желтым, это как выключить, потому что @ в начале строки, как я написал в начале.

Любая идея, как решить эту проблему, не создавая новый SelectList (blah blah), просто преобразуя @ item.Name в String?

+0

Вам не нужен параметр at, потому что вы уже находитесь в кодовом блоке. –

+0

@ErikFunkenbusch, я давно это пробовал, и он не работает: сообщение об ошибке компилятора: CS1973: «System.Web.Mvc.HtmlHelper » не имеет применимого метода с именем «DropDownList», но, похоже, имеет метод расширения с таким именем , Методы расширения не могут динамически отправляться. Рассмотрите возможность использования динамических аргументов или вызова метода расширения без синтаксиса метода расширения. Как я уже сказал, я пробовал много вещей, но он не работает – user3561028

+0

И вот вы идете. Вы не можете использовать динамику в подобном помощнике. Помещение @ перед ним ничего не изменит. Сначала нужно скопировать значение в локальную переменную, а затем использовать эту локальную переменную в вашем помощнике. –

ответ

0

НАЙДИТЕ РЕШЕНИЕ ПОСЛЕ 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, и все! ufff Я видел так много сообщений, где люди, которые создают ViewBag, а затем создавая новый список в DropDOwnList, что это не имеет смысла ... ну вот ответ!