Пройдите 2-мерный массив через вид - PullRequest
0 голосов
/ 17 января 2011

Я пытаюсь напечатать двумерный массив, но не могу понять это.

Мой контроллер использует этот код:

        public ActionResult Test(string str)
    {

         DateTimeOffset offset = new DateTimeOffset(DateTime.Now);
        offset = offset.AddHours(-5);

        string[,] weekDays = new string[7,2];

        for (int i = 0; i < 7; i++)
        {
            weekDays[i,0] = String.Format("{0:yyyy-MM-dd:dddd}", offset); //Date
            weekDays[i,1] = String.Format("{0:dddd}", offset); //Text
            offset = offset.AddHours(24);
        }

        weekDays[0,1] = "Today";

        ViewData["weekDays"] = weekDays;

        return View();
    }

Теперь я не хочу печатать этот массив будних дней в виде выпадающего списка, и я подумал, что это сработает:

                <% foreach (var item in (string[,])ViewData["weekDays"]) 
               { %>
                <option value=" <%= item[0] %> "> <%= item[1] %>  </option>
            <% } %>

Но это не тот случай, этот код выводит только первый символ строки.

Значит, кто-нибудь получил предложение?

Спасибо!

/ M

1 Ответ

0 голосов
/ 17 января 2011

Проблема здесь в том, что foreach в массиве будет возвращать строку как элемент (а не массив), поэтому item [0] работает как индексатор над строкой, возвращая первый символ. Используйте цикл for (или while), и это должно сработать:

<script runat="server">

    private string[,] viewData;

    protected string[,] Data
    {
        get
        {
            return viewData ?? (viewData = (string[,])ViewData["weekDays"]);
        }
    }

</script>

<% for (var i=0; i< Data.GetUpperBound(0); i++) 
               { %>
                <option value=" <%= Data[i][0] %> "> ...
            <% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...