我有一个包含标签列表的申请人模型:
public class Applicant
{
public virtual IList<Tag> Tags { get; protected set; }
}
提交表单时,有一个输入字段,其中包含用户输入的逗号分隔的标记列表。我有一个自定义模型绑定器将此列表转换为集合:
public class TagListModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var incomingData = bindingContext.ValueProvider.GetValue("tags").AttemptedValue;
IList<Tag> tags = incomingData.Split(',').Select(data => new Tag { TagName = data.Trim() }).ToList();
return tags;
}
}
但是,当我的模型被填充并传递到POST上的控制器操作时,Tags属性仍然是一个空列表。知道为什么它没有正确填充列表吗?
答案 0 :(得分:2)
模型绑定器仅绑定提交的值。它不绑定在视图中呈现的值。
您需要创建自定义EditorTemplate以在需要时呈现标记。
答案 1 :(得分:2)
问题是您在protected
属性中设置了Tags
设置访问者。如果您将其更改为public
,则可以正常使用。
public class Applicant
{
public virtual IList<Tag> Tags { get; set; }
}
答案 2 :(得分:1)
MVC可already bind to a List,我建议使用已经完成所需工作的内置技术。
我没有注意到有关添加活页夹的任何代码,您是否已将ModelBinder添加到活页夹中?
protected void Application_Start()
{
ModelBinders.Binders.Add(typeof(IList<Tag>), new TagListModelBinder());
}