2013-12-04 2 views
5

У меня есть следующие EF генерироваться модель данных:Доступ к свойствам модели в Razor-4 вид

public partial class PrinterMapping 
{ 
    public string MTPrinterID { get; set; } 
    public string NTPrinterID { get; set; } 
    public string Active { get; set; } 
} 

Я тогда следующий вид модели:

public class PrinterViewModel 
{ 
    public PrinterMapping PrinterMapping; 
    public Exceptions Exceptions; 
    public IEnumerable<PrinterMapping> Printers; 
} 

В моем действии Индекс в HomeController Я нахожусь передача моей модели представления в представление индекса.

private eFormsEntities db = new eFormsEntities(); 
public ActionResult Index() 
{ 
    PrinterViewModel printerModel = new PrinterViewModel(); 
    printerModel.Printers = from pt in db.PrinterMapping select pt; 

    return View(printerModel); 
} 

Мой Индексный звонит частичный вид следующим образом к концу (возможно неправильно):

@Html.Partial("~/Views/Home/GridView.cshtml") 

Мои GridView.cshtml выглядит:

@model AccessPrinterMapping.Models.PrinterViewModel 

<h2> This is Where the Grid Will Show</h2> 

@{ 
    new WebGrid(@model.Printers, ""); 
} 

@grid.GetHtml() 

я узнал о методе WebGrid от http://msdn.microsoft.com/en-us/magazine/hh288075.aspx.

Моя линия WebGrid совсем не обрадована, так как она не распознает @model внутри этой строки. Как получить доступ к принтерам в модели просмотра, в которую я прошел? Возможно ли это?

Большое спасибо вам всем.

ответ

2
@{ 
    new WebGrid(Model.Printers, ""); 
} 

, а также вы должны передать модель в частичный вид в

@Html.Partial("~/Views/Home/GridView.cshtml") 

во втором параметре. Я предполагаю, что этот звонок должен быть

@Html.Partial("~/Views/Home/GridView.cshtml", Model) 
+0

Благодарю вас всех. Не могли бы вы сообщить мне, что произойдет, если я не передам модель явно частично? Похоже, мне не нужно было в этом случае. Во-вторых, какая разница между @model и Model? – user3041439

+0

@model - это просто объявление типа модели. Модель - это свойство вида с типом, объявленное в объявлении модели @. А также, если вы не передадите модель в частичный вид, свойство Model будет равно null, и вы получите NullReferenceException, когда вы будете использовать свойство Model в представлении GridView.cshtml. –

+0

Спасибо, Dmytro за объяснение. Похоже, что я не получаю исключение NullReferenceException путем NOT, явно передающего модель на частичный вид. Но может быть, это хорошая практика сделать это в любом случае. – user3041439

2

Theres две проблемы с вашим кодом.

Во-первых, вы должны явно передать вашу модель, как это:

@Html.Partial("~/Views/Home/GridView.cshtml", Model) @* explicitly pass the model in *@ 

Тогда, потому что вы уже в блоке кода в вашем частичный вид .. Вам не нужно символ @ .. и Model имеет верхний регистр М.

new WebGrid(Model.Printers, ""); 

@model директива для ваших мнений/частичный вид. Подумайте об этом как о команде «configuration». Model - это фактическое имущество. Это объект, который передается в представление .. и относится к типу, указанному в директиве @model.

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