ASP.NET MVC - 如何将数组传递给视图?

9

我在这里也很苦恼,想要找到一种简单的方式,在ASP.NET MVC框架中将数组从控制器传递到视图。

所以在我的控制器中,我会有类似以下的代码:

public class HomeController : ApplicationController
{   
    public ActionResult Index()
    {
        string[] myArray = { "value01", "value02", "value03"};
        ViewData["passedArray"] = myArray;
        return View();
    }
}

在我看来,我只需要调用 ViewData["passedArray"] 并在其上运行循环即可。但显然,ViewData 被视图接收为 System.String,可能是由于数组数据类型的声明,但不幸的是,我不知道如何正确简单地传递它而不创建数百万行代码。如果有人能帮助我,那将是太棒了。提前致谢。
3个回答

16

您需要在View中进行强制类型转换

<% var myArray = (string[])ViewData["passedArray"]; %>

谢谢你的敏捷,agileguy,你确实非常敏捷!正是我想要的。干杯! - zanona

9

您可以通过将视图中的ViewData["passedArray"]强制转换为string[]来实现此功能。或者,如果您想要更进一步:创建一个包含该数组成员的ViewModel类,并将该ViewModel传递给您的视图的强类型版本。


非常感谢David,我按照你说的进行了强制转换,很完美。 但是我喜欢创建一个特定的视图模型来管理变量的想法。我会努力学习更多相关知识。 再次感谢。 - zanona
选择ViewModel有很多好处。(1)需要转换类型会导致运行时错误。(2)创建ViewModel可以使您在未来灵活地添加功能,而无需更改视图的类型。(3)您的代码将更易读,而不会在视图中散布ViewData["key"]代码。 - David Andres
David,你的意思是如果我为控制器创建一个新类,比如MyCustomViewModel,并像这样传递这个类: var myCustomOne = new MyCustomViewModel(); myCustomOne.myArray = new int[] {1,2,3,4} return View(myCustomOne);那么我就可以在视图中访问该数组,如下所示: Model.myArray as int[] 是这样的吗? - zanona
没错,不过你可能需要更改视图定义才能使其正常工作。如果您复制了现有的视图标记并删除了该视图,则更容易完成此操作。然后,在操作方法中右键单击,选择“添加视图”选项,并确保选中“强类型”选项,并将其设置为新的ViewModel。 - David Andres

1
你可以像这样使用PartialView:
  • 控制器

        public ActionResult Index()
        {
            List<string> arr = new List<string>() { "apple", "banana", "cat" };
            return View(arr);
        }
    
  • 视图

@model List<string>
@foreach (var item in Model) { 
        @Html.Partial("~/Views/Shared/Fruits/_myFruits.cshtml", item);
}
  • PatialView 即 _myFruits.cshtml
@model  string
<li>@Model</li>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接