Итерация по ArrayList в ViewData ASP.NET MVC - PullRequest
1 голос
/ 30 марта 2011

Я пишу приложение, в котором мне нужно перебрать ArrayList, отправленный контроллером в представление с использованием Viewdata.

Действие контроллера:

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

   ViewData["ItemsList"] = arrayLst;
}

Теперь мне нужно выполнить итерациюэто ViewData и отображать как неупорядоченный список в представлении (которое не является строго типизированным), но я не могу получить синтаксис for / foreach right.

Я продолжаю получать сообщение об ошибке: оператор foreach не может работать с переменнымитипа «объект», потому что «объект» не содержит открытого определения для «GetEnumerator»

Может кто-нибудь, пожалуйста, помогите мне.

Спасибо.

Ответы [ 3 ]

4 голосов
/ 30 марта 2011

Я думаю, что вам не хватает состава.Если вы знаете, что это arrayList, приведите его как таковой, когда вы извлекаете его из ViewData. Проверьте эту ссылку для получения дополнительной информации .

foreach(item in (ViewData["ItemsList"] as ArrayList))
{
    doSomethingHere();
}
0 голосов
/ 02 ноября 2014

Я новичок в .net, я использую MVC5, я проверил пример .net, где люди делают представление типа Strongly, чтобы передать данные из контроллера для просмотра. Для этого у вас должна быть модель, в которой будут установлены эти параметры, а затем вы сможете передать данные.

Предположим, моя модель пользователя

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>  
}
0 голосов
/ 30 марта 2011

Не обязательно должен быть список массивов, вы можете просто передать свой массив, если это то, что вы хотите

foreach(var item in (string[])ViewData["ItemsList"])
{    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...