在Razor-4视图中访问模型属性

时间:2013-12-04 09:58:49

标签: c# asp.net-mvc asp.net-mvc-4 razor viewmodel

我有以下EF生成的数据模型:

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中的Index Action中,我将视图模型传递给Index视图。

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()

我从http://msdn.microsoft.com/en-us/magazine/hh288075.aspx了解了WebGrid方法。

我的WebGrid行根本不开心,因为它无法识别该行中的@model。 如何访问我传入的视图模型中的打印机?这甚至可能吗?

非常感谢大家。

2 个答案:

答案 0 :(得分:2)

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

并且您还必须将模型传递到

中的部分视图中
@Html.Partial("~/Views/Home/GridView.cshtml")

在第二个参数中。我想这个电话应该是

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

答案 1 :(得分:2)

您的代码存在两个问题。

首先,你应该明确地传递你的模型:

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

然后,因为你已经在局部视图中的代码块中了..你不需要@符号.. Model有一个大写的M。

 new WebGrid(Model.Printers, "");

@model是您的观看次数/部分观看次数的指令。将其视为“配置”命令。 Model是一个实际的财产。它是传递给视图的对象..并且是您使用@model指令指定的类型。