迭代ViewData ASP.NET MVC中的ArrayList

时间:2011-03-30 02:58:28

标签: asp.net-mvc asp.net-mvc-2

我正在编写一个应用程序,其中我需要使用Viewdata迭代控制器发送到视图的ArrayList。

控制器操作:

public ActionResult ConfirmItemsList(string[] arr)
{
   // I generate ArrayList here , call it arrayLst

   ViewData["ItemsList"] = arrayLst;
}

现在我需要迭代这个ViewData并在视图中显示为无序列表(它不是强类型的),但是我无法正确获取for / foreach的语法。

我一直收到错误:foreach语句不能对'object'类型的变量进行操作,因为'object'不包含'GetEnumerator'的公共定义

有人可以帮助我。

感谢。

3 个答案:

答案 0 :(得分:4)

我认为你错过了一个演员。如果你知道它是一个arrayList,当你把它拉出ViewData时就这样抛出它。 Check out this link for more info

foreach(item in (ViewData["ItemsList"] as ArrayList))
{
    doSomethingHere();
}

答案 1 :(得分:0)

不必是数组列表,只要传递你想要的数据就可以传入你的数组

foreach(var item in (string[])ViewData["ItemsList"])
{    
}

答案 2 :(得分:0)

我是.net的新手,我正在使用MVC5,我已经检查了一些.net示例,其中人们正在进行强类型视图以将数据从控制器传递到视图。为此,您应该有一个模型,其中将设置这些参数,然后您可以传递数据。

假设我的模型是用户

namespace Mvc5Application.Models{
using System;
using System.Collections.Generic;

public partial class User
{
    public System.Guid UserID { get; set; }
    public string Username { get; set; }
    public string Password { get; set; }
    public Nullable<System.Guid> OrgID { get; set; }

    public virtual Organization Organization { get; set; }
}
}

现在我的控制器是Home,在索引页面中有一个登录页面

如果你采用传统方式,那么你的控制器看起来像

[AllowAnonymous]
    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }

    [HttpPost]
    public ActionResult Index(User model)
    {
        ...[code for verification ]...                  

        return View(model);
    }

相应的视图将是

 @foreach (var item in Model)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.username)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.password)
        </td>

    </tr>
}

但是如果你想做一些自定义就像你不想遵循这个传统模型并且想要从视图页面发布任何内容,并在控制器中获取它并在执行某些操作后如果你有一组数据并且您希望将数据传入视图并在视图中的不同位置显示它然后您必须使用ViewBag或ViewData

然后控制器将

 public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application.";

        return View();
    }

    [HttpPost]
    public ActionResult Index(FormCollection form)
    {
        String Username = form["Username"].ToString();
        String Password = form["Password"].ToString();
        Dictionary<string, string> MyList = new Dictionary<String, String>();
        MyList.Add("name",Username);
        MyList.Add("pass",Password);

        ViewData["user"] = MyList;


        return View();
    }

视图将是

@{
ViewBag.Title = "Home Page";
var list = ViewData["user"] as Dictionary<String, String>; 
}
<h2>@ViewBag.Message</h2>
<div>

@if (list != null)
{
    @Html.Label("User:-")  @list["name"]
<br />@Html.Label("password:-") @list["pass"]  

}
</div>
<p>
Please ligin / Register from here</p>
@using (Html.BeginForm("Home"))
{
<table>
    <tr>
        <td>User Name</td>
        <td>@Html.TextBox("Username", ViewBag.CurrentFilter as string)</td>
    </tr>
    <tr>
        <td>Password</td>
        <td>@Html.TextBox("Password", ViewBag.CurrentFilter as string)</td>
    </tr>
    <tr>
        <td></td>
        <td><input type="submit" value="Save" class="btn btn-default" /></td>
    </tr>

</table>  
}