Я пытаюсь реализовать систему меток в свой проект MVC asp.net. Когда пользователь редактирует или добавляет задачу, они могут добавить любое количество тегов, которые они хотят перед представлением. Я использую плагин Tagit JQuery, поэтому когда пользователь добавляет новый тег, поле ввода создается, который похож:
<input type="hidden" style="display:none;" value="tag1" name="Tags[]">
Когда пользователь нажимает кнопку отправки после добавления нескольких тегов, браузер отправляет следующий querystring на сервер (полученный через скрипача):
IsNew=True&Id=2222&Title=Test+Title&Description=Test+Description&Tags%5B%5D=Tag1&Tags%5B%5D=blah&Tags%5B%5D=another-tag
Теперь мой viewmodel, в который я сериализирую эти данные, имеет следующую структуру:
public class KnowledgeBaseTaskViewModel
{
public int Id { get; set; }
[Required(AllowEmptyStrings=false, ErrorMessage="Task title is required")]
[StringLength(500)]
public string Title { get; set; }
[Required(AllowEmptyStrings=false, ErrorMessage="Task description is required")]
[StringLength(500)]
public string Description { get; set; }
public List<string> Tags { get; set; }
public bool IsNew { get; set; } // Needed to determine if we are inserting or not
}
Наконец мое действие получения имеет следующую подпись:
[HttpPost]
public ActionResult EditTask(KnowledgeBaseTaskViewModel task)
Проблема - то, что мой список тега не сериализирует правильно, и мои Теги списка являются пустыми. Я посмотрел на различные вопросы на этом сайте о том, как сериализировать массивы, но я все еще не вижу то, что я делаю неправильно. Любая справка значительно ценится.
Похоже, то, что у вас есть, должно работать, но попробуйте изменить тип свойства Tags с List на IList. связыватель модели может не использовать конкретный тип List <>.
также ознакомьтесь с этой статьей Фила Хаака: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx