2012-08-14 3 views
1

У меня возникли проблемы с вложением webgrids.MVC3 рекурсивный вложенный webgrid

До тех пор, пока у меня только 1 webgrid внутри другого, все хорошо, но как только я попытаюсь вложить webgrid в уже вложенный веб-сервер, он терпит неудачу.

Это код, у меня есть:

@grid.GetHtml(columns: 
grid.Columns(
    grid.Column("Name"), 
    grid.Column("Variants", format: (item) => 
    { 
     WebGrid varGrid = varGrid = new WebGrid(item.Variant); 
     return varGrid.GetHtml(
       columns: varGrid.Columns(
        varGrid.Column("Name") 

       ), 
       displayHeader : false 
     ); 
    }), 
    grid.Column("Resource", format: (item) => 
    { 
     WebGrid resGrid = new WebGrid(item.Resource); 
     return resGrid.GetHtml(
      columns: resGrid.Columns(
       resGrid.Column("Name"), 
       resGrid.Column("Parameters", format: (item) => 
       { 
        WebGrid resParamGrid = new WebGrid(item.Resource.Parameter); 
        return resParamGrid.GetHtml(
        columns: resParamGrid.Columns(
          resParamGrid.Column("Name") 
          ), 
          displayHeader: false 
         ); 
       }) 
      ), 
      displayHeader: false 
     ); 
    }), 
    grid.Column("Parameter", format: (item) => 
    { 
     WebGrid parGrid = new WebGrid(item.Parameter); 
     return parGrid.GetHtml(
      columns: parGrid.Columns(
        parGrid.Column("Name") 
      ), 
      displayHeader: false 
     ); 
    }) 
) 
) 

Так сетка имеет другую сетку, Resources. Каждая сетка Resources имеет сетку, содержащую параметры.

В VS нет никакой ошибки, но когда я пытаюсь запустить приложение, он вернется как ошибка:

"Compiler Error Message: CS1502: The best overloaded method match for 'System.Web.Helpers.WebGrid.Column(string, string, System.Func, string, bool)' has some invalid arguments"

С указателем на это место:

grid.Column("Resource", format: (item) =>

ли это невозможно иметь рекурсивные вложенные вебгриды, или я делаю что-то неправильно?

ответ

0

Это проблема с повторением переменной item. Попробуйте переименовать его:

grid.Column("Resource", format: (item) => 
{ 
    WebGrid resGrid = new WebGrid(item.Resource); 
    return resGrid.GetHtml(
     columns: resGrid.Columns(
      resGrid.Column("Name"), 
      resGrid.Column("Parameters", format: (resource) => 
      { 
       WebGrid resParamGrid = new WebGrid(resource.Parameter); 
       return resParamGrid.GetHtml(
        columns: resParamGrid.Columns(
         resParamGrid.Column("Name") 
        ), 
        displayHeader: false 
       ); 
      }) 
     ), 
     displayHeader: false 
    ); 
}) 
+0

Большое спасибо. не могу поверить, что я сам этого не поймал –

Смежные вопросы