2013-08-27 3 views
0

Прежде всего, обратите внимание, что я немного новичок в этом. Я хотел бы знать, как я могу сделать Webgrid со столбцами из двух моделей (две таблицы).Столбцы двух моделей в одной веб-странице

У меня есть две модели, как то: Model1:

public int Id { get; set; } 
public string Name { get; set; } 

model2:

public int Id { get; set; } 
public int Model1_Id { get; set; } 
public string Level { get; set; } 
public string AdditionalInfo { get; set; } 
public string Note { get; set; } 

в данных ручки контроллера и отправить для просмотра.

... 
List<Model2> data = new List<Model2>(); 
... 
return View(data) 

Теперь возникает проблема. В представлении я создаю Webgrid из модели. Когда проблема заключается в том, что имена столбцов должны быть идентичны именам свойств или они падают.

@model IEnumerable<Model2> 

<div class="class-name"> 
    @grid.GetHtml(columns: new [] { 
    grid.Column("Level"), 
    grid.Column("AdditionalInfo", header: "Additional info"), 
    grid.Column("Note") 
    }, tableStyle: "some-name") 
</div> 

Это все хорошо, но я хочу, что сетка также название от Model1 и значения будет зависит от Model1_Id.

Если я попробую добавить новый столбец сеткой. Колонна падает.

Если я добавлю вторую модель (после первой строки), она пишет: «Только оператор« модель »разрешен в файле».

Все, что я пробовал, упало.

Я пробовал работать с Google, но через несколько часов я хотел бы спросить вас, ребята. Спасибо

+2

вы могли бы присоединиться к модели в один – Omu

+0

Согласитесь, создать единую модель который содержит свойства, которые вы хотите в своей сетке, с обеих моделей. – acarlon

+0

Спасибо, ребята. Я знал, что решение будет очень простым. Еще раз спасибо. – Ademar

ответ

0

Попробуйте это,

Это просто пример:

Модель

public class EmployeeDetailsModel 
    { 
     public string EnteredValue { get; set; } 
     public int EmployeeId { get; set; } 
    } 
    public class SampleModel 
    { 
     public int inx { get; set; } 
     public bool studentclass { get; set; } 
     public string SampleDescription { get; set; } 
     public string SampleCode { get; set; } 
     public string SampleItems { get; set; } 
     private EmployeeDetailsModel _employee = new EmployeeDetailsModel(); 
     public EmployeeDetailsModel employee { get { return _employee; } set { _employee = value; } } 
    } 

Контроллер

public ActionResult IndexJquery() 
     { 
      ViewBag.RegisterItems = GetSamples(); 
      return View(); 
     } 
    public IEnumerable<SampleModel> GetSamples() 
     { 
      List<SampleModel> sampleAdd = new List<SampleModel>(); 
      SampleModel s12 = new SampleModel(); 
      s12.inx = 1; 
      s12.SampleCode = "123se"; 
      s12.SampleDescription = "GOOD"; 
      s12.SampleItems = "newone"; 
      s12.employee.EmployeeId = 1; 
      s12.employee.EnteredValue = "jaimin"; 


      SampleModel s2 = new SampleModel(); 
      s12.inx = 2; 
      s2.SampleCode = "234se"; 
      s2.SampleDescription = "Average"; 
      s2.SampleItems = "oldone"; 
      s2.employee.EmployeeId = 2; 
      s2.employee.EnteredValue = "jaimin2"; 


      sampleAdd.Add(s12); 
      sampleAdd.Add(s2); 

      return sampleAdd; 
     } 

Просмотр

<div> 
     @{ 
      var grid = new WebGrid(ViewBag.RegisterItems); 
      @grid.GetHtml(
       alternatingRowStyle: "alt", 
        columns: grid.Columns(
        grid.Column("SampleCode"), 
        grid.Column("SampleDescription"), 
        grid.Column("SampleItems"), 
        grid.Column("employee.EmployeeId", header: "EmployeeId"), 
        grid.Column("employee.EnteredValue", header: "EnteredValue") 
       )); 
     } 
    </div> 
1

Вы можете создать ViewModel как с моделью

public class MyViewModel 
{ 
    public Model1 Model1Data { get; set; } 
    public List<Model2> Model2List { get; set; } 
} 

In Controller 

    MyViewModel model = new MyViewModel(); 
    model.Model2List = new List<Model2>() 
    model.Model1Data = new Model1() 

На ваш взгляд,

@model MyViewModel