1

我有 2 个数组需要传递给并在视图中显示。现在我有:

String[] unactivePanelsHeader = new String[] {"GT5C", "GT5E", "GT5P", "GT5W"};
int[] unactivePanelsValues = new int[4];

//Values for unactivePanelsValues created with a linq query

ViewBag.unactivatedHeader = unactivePanelsHeader;
ViewBag.unactivatedPanels = unactivePanelsValues;

结果随后显示在视图中。

<table>
    <tr>
    @for (int i = 0; i < 4; i++ )
    {
        <td>@ViewBag.unactivatedHeader[i]</td>
    }
    </tr>
    <tr>
    @for (int i = 0; i < 4; i++ )
    {
        <td>@ViewBag.unactivatedPanels[i]</td>
    }
    </tr>

它有效,但我是这个平台的新手,似乎应该有更好的方法。

4

4 回答 4

1

最好创建一个包含视图所需的所有数据的强类型模型类。

然后你会使用

@Model.Property
于 2012-09-20T13:35:43.907 回答
1

这 2 个数组应包含在页面顶部返回的模型中。

例如 Inherits="ViewPage<>"

另一种选择是在 PartialView 中传递数组

例如 Html.RenderPartial("YourControl", new Model { x = "value1", y = "value2" } );

于 2012-09-20T13:37:19.223 回答
1

有几种方法可以传递和显示数据。

其中之一是 Sruly 提到的强类型模型。

我建议您关注或查看这些教程http://www.asp.net/mvc/tutorials/mvc-4/getting-started-with-aspnet-mvc4/intro-to-aspnet-mvc-4

public ActionResult ViewUnactivated()
    {
        var unactivatedViewModel= new UnactivatedViewModel{ UnactivatedHeaders = unactivatedPanelsHeaders, UnactivatedPanels = unactivatedPanelsValues };
        return View(UnactivatedViewModel);
    }

并创建一个相应的视图,您可以在其中循环模型属性的

于 2012-09-20T13:37:24.427 回答
1

当您不知道要显示什么类型的数据时,Viewbag 主要适用于通用视图。显示您预先知道其类型的信息的视图应创建为强类型视图。您创建一个具有所有视图数据属性的模型,在控制器中创建该模型的实例并将模型传递给您的视图。例如,模型可能如下所示:

class MyModel
{
    IList<string> UnactivatedHeaders { get; set; }
    IList<int> UnactivatedPanels { get; set; }


    public MyModel
    {
        UnactivatedHeaders = new List<string>();
        UnactivatedPanels = new List<int>();
    }
}

然后你的控制器会像这样调用你的视图:

public ActionResult Index()
{
    var model = new MyModel();
    model.UnactivatedHeaders.Add("GT5C");
    // and so on...

    return View(model);

}

在您看来,您将能够像这样访问模型的属性:

@foreach(var header in Model.UnactivatedHeaders) {
<td>@header</td>
}

要创建强类型视图,首先创建模型并至少编译一次项目。然后创建您的视图并标记复选框“创建强类型视图”并在下面的下拉列表中选择您的模型类。

于 2012-09-20T13:40:52.040 回答