1

我有一个包含标签列表的申请人模型:

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 属性仍然是一个空列表。知道为什么它没有正确填充列表吗?

4

3 回答 3

2

模型绑定器仅绑定提交的值。它不绑定视图中呈现的值。

您需要创建自定义 EditorTemplate 以根据需要呈现标签。

于 2012-06-28T15:46:47.157 回答
2

问题是您在属性中有protectedset 访问器。Tags如果您将其更改public为如下所示,则一切正常。

public class Applicant
{
    public virtual IList<Tag> Tags { get; set; }
}
于 2012-06-28T16:56:43.837 回答
1

MVC已经可以绑定到 List,我建议使用已经可以满足您需要的内置技术。

我没有注意到有关添加活页夹的任何代码,您是否将 ModelBinder 添加到活页夹中?

protected void Application_Start()
{
  ModelBinders.Binders.Add(typeof(IList<Tag>), new TagListModelBinder());
}
于 2012-06-28T15:56:04.923 回答