Почему DefaultModelBinder в MVC3 не связывает? - PullRequest
0 голосов
/ 16 мая 2011

Я не понимаю, почему DefaultModelBinder в MVC3 не сопоставляет данные публикации формы с моим методом действия.У меня есть следующие ViewModels :

public class DisplayExcelTableViewModel
{
   public string UploadedFileName { get; set; }
   public List<string> TableHeaders { get; set; }
   public List<TableRowViewModel> TableRows { get; set; }
}

public class TableRowViewModel
{
   public List<string> TableColumns { get; set; }
}

Они отображаются в (частичное) представление с использованием DisplayTemplates :

@using (Html.BeginForm("SubmitExcel", "Home", FormMethod.Post))
{ 
<fieldset>

<table>
<tr>
<th>@Html.DisplayFor(m => m.TableHeaders)</th>//<input id="TableHeaders_0_" name="TableHeaders[0]" type="text" value="Opportunity Id" />
</tr>

<tr>
<td>@Html.DisplayFor(m => m.TableRows)</td>//<input id="TableRows_0__TableColumns_0_" name="TableRows[0].TableColumns[0]" type="text" value="1-H7PKD9" />
</tr>

</table>           


<input type="submit" value="Send" />
</fieldset> 
}

И метод действия выглядит следующим образом:

public ActionResult SubmitExcel(DisplayExcelTableViewModel excelTable)

Чтобы проверить, работает ли он только с одним TableRows Я попытался:

public ActionResult SubmitExcel([Bind(Prefix = "TableRows")] TableRowViewModel TableRows)

для проверкиЯ также пытался поставить List<TableRows> и убрать атрибут Bind .Это не работает.Я получил исключение времени выполнения:

"System.MissingMethodException: для этого объекта не определен конструктор без параметров."

Можете ли вы сказать мне, что я делаю неправильно?*

Спасибо, Франческо

Ответы [ 2 ]

2 голосов
/ 18 мая 2011

Проблема заключается в том, что мои ViewModels НЕ имеют конструктор без параметров , что и ищет Связыватель модели по умолчанию (используется. (), который основан на тех типах, которые имеют открытые беспараметрические конструкторы). Решения в этом случае два:

1) Добавьте конструктор без параметров в ViewModel и другие пользовательские классы, заключенные в него.

2) Создайте подшивку пользовательской модели, которая также относится к случаю вашей модели ViewModel

Спасибо

Источник: Pro ASP.NET MVC2 Framework (2-е издание)

0 голосов
/ 16 мая 2011

Вы проверили (например, с помощью Firebug), отправляются ли значения формы на сервер?Я спрашиваю, потому что Html.DisplayFor обычно отображает элементы отображения, тогда как для публикации значений вы обычно должны использовать Html.EditorFor.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...