передать данные словаря из представления в контроллер - PullRequest
0 голосов
/ 30 ноября 2009

Некоторое время назад я пытался передать данные словаря из моего представления в мой контроллер. И я смог сделать это после поиска в сети (помните, что это был один из постов Скотта Хансельмана). Решение, которое у меня было, было что-то вроде

<%for(int index=0; index<Model.Count(); index++){
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties["+index+"].Key"%>"/>
     <input type="hidden" name="<%="properties["+index+"].Value"%>"/>
<%}%>

public ActionResult Process(IDictionary<string,string> properties)
{
      doSomething();
      return View();
}

Код работал некоторое время, а затем я провел некоторый рефакторинг и избавился от этого куска кода. Сегодня я столкнулся с ситуацией, в которой я хотел бы снова передать словарь. Но как бы я ни старался, параметр properties , полученный действием, всегда был нулевым. Я попробовал приведенный выше код и

<%for(int index=0; index<Model.Count(); index++){
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties.Keys["+index+"]"%>"/>
     <input type="hidden" name="<%="properties.Values["+index+"]"%>"/>
<%}%>

Ни один код не работал. Я снова погуглил, но не смог найти пост, который помог мне раньше. Может кто-то указать, что я сделал не так? спасибо миллион.

Обновление : Оказалось, что проблема в том, что сгенерированный HTML-код не имеет непрерывно увеличивающихся индексов. Например, я получал свойства [0], свойства [1], свойства [3] ... (свойства [2] отсутствовали). Итак, firebug будет вашим лучшим другом при возникновении подобных проблем.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2009

Когда у меня возникает такая проблема, я всегда проверяю ключи FormCollection, чтобы убедиться, что они содержат видимые ключи, вы можете сделать это, установив точку останова в ActionMethod.

public ActionResult Process(IDictionary<string,string> properties, FormCollection f)

И проверьте, есть ли у «f» правильные ключи.

Вы также можете попробовать

TryUpdateModel(properties, "properties");
0 голосов
/ 30 ноября 2009

Ваш индексатор находится не в том месте, это должен быть индекс объекта свойств.

<%for(int index=0; index<Model.Count(); index++{
     var property= Model.ElementAt(index);%>
     <input type="hidden" name="<%="properties["+index+"].Key"%>"/>
     <input type="hidden" name="<%="properties["+index+"].Value"%>"/>
<%}%>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...