Я пытаюсь использовать Select2 для редактирования тегов для статьи. Моя проблема в том, что поле «Теги» в моей модели представления имеет значение null при возврате в контроллер.
У ArticleTag есть поля Id и Name.
Модель представления
public class EditArticleViewModel
{
public Guid Id { get; set; }
public string Header { get; set; }
public string Description { get; set; }
[AllowHtml]
public string Body { get; set; }
public string Image { get; set; }
public bool IsPublished { get; set; }
[UIHint("TagsEditor")]
public IList<ArticleTag> Tags { get; set; }
}
Вид статьи
<div class="form-group">
@Html.LabelFor(model => model.Tags, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Tags)
@Html.ValidationMessageFor(model => model.Tags, "", new {@class = "text-danger"})
</div>
<script type="text/javascript">
$('#tags')
.select2({
data: ["Clare", "Cork", "South Dublin"],
tags: true,
tokenSeparators: [','],
placeholder: "Add your tags here"
});
</script>
Editor template
@model List<MVCForum.Domain.DomainModel.CMS.ArticleTag>
<select id="tags" multiple="multiple" style="width: 100%">
@for (int i = 0; i < Model.Count; i++)
{
<option selected="selected">@Model[i].Name</option>
}
</select>
Теперь я просто не могу понять, как получить данные из моего Editortemplate/View в контроллер. Список имеет значение null при возврате.
Вместо этого я попытался изменить его на список строк (в модели представления, шаблоне редактора и т.д.). Я попытался добавить шаблон редактора для поля «Имя». Тот же результат.
Лучше всего для меня было бы получить теги в виде строки, разделенной запятыми. Но я просто не хочу, чтобы это как-то работало.
<select>
к коллекции сложных объектов - вам нужно свойство (скажем)int[] SelectedTags
для привязки (при условии, что вы хотите отправить обратноId
выбранныхTags
). И замените васEditorTemplate
на@Html.ListBoxFor(m => m.SelectedTags, new SelectList(Model.Tags, "Id", "Name")
, а затем$('#SelectedTags').select2() {...
- person   schedule 17.08.2016<select multiple>
возвращает массив простых значений (string
,int
и т. д.), а не массив сложных объектов. Я не знаю, хотите ли вы привязываться кId
илиName
значениюArticleTag
, но вашей модели представления требуется массив совпадающих простых значений (string[]
илиint[]
) для привязки. Я предложил назвать егоSelectedTags
, чтобыid
вашего элемента управления былоSelectedTags
, поэтому он должен быть$('#SelectedTags').select2() {...
. И почему вы вручную переопределяете значения, используяdata: ....
? - person   schedule 17.08.2016List<string>
, либоstring[]
- person   schedule 17.08.2016