MVC自定义模型绑定器问题

时间:2010-08-17 09:37:03

标签: asp.net asp.net-mvc asp.net-mvc-2 modelbinders model-binding

我的视图中有一个文本框,我希望以字符串列表的形式接收值。

例如,如果有人输入:tag1,tag2,tag3 ...接收一个包含3个元素的List。

我做了一个自定义模型绑定器,但我仍然从帖子中接收字符串而不是List。

这是我做的事情:

这是我的模特:

public class BaseItem
{
    [Required]
    [StringLength(100)]
    public string Name
    {
       get;
       set;
    }
    public IList<string> RelatedTags
    {
       get;
       set;
    }

}

我使用上述模型输入的视图:

<% using (Html.BeginForm()) {%>
        <%: Html.ValidationSummary("Please complete in a right way the fields below.") %>

        <fieldset>
            <legend>Fields</legend>
            <div class="editor-field">
                <%: Html.LabelFor(e => e.Name)%>
                <%: Html.TextBoxFor(e => e.Name)%>
                <%: Html.ValidationMessageFor(e => e.Name)%>
            </div>
            <div class="editor-field">
                <%: Html.LabelFor(e => e.RelatedTags)%>
                <%: Html.TextBoxFor(e => e.RelatedTags)%>
                <%: Html.ValidationMessageFor(e => e.RelatedTags)%>
            </div>
            <p>
                <input type="submit" />
            </p>
        </fieldset>

    <% } %>

我的自定义模型绑定器:

public class TagModelBinder:DefaultModelBinder
{
    protected override object GetPropertyValue(
        ControllerContext controllerContext, 
        ModelBindingContext bindingContext, 
        System.ComponentModel.PropertyDescriptor propertyDescriptor, 
        IModelBinder propertyBinder)
    {
       object value = base.GetPropertyValue(
                          controllerContext, 
                          bindingContext, 
                          propertyDescriptor, 
                          propertyBinder);
       object retVal = value;
       if (propertyDescriptor.Name == "RelatedTags")
       {                 
           retVal = bindingContext.ValueProvider.GetValue("RelatedTags")
                        .RawValue.ToString().Split(',').ToList<string>();
       }
       return retVal;
    }
}

我在我的Global.asax.cs文件中注册了我的自定义模型绑定器:

ModelBinders.Binders.Add(typeof(string), new TagModelBinder());

我拥有的问题是永远不会进入我自定义活页夹的方法“GetPropertyValue”。

肯定我什么都没发现。你能帮我个忙吗?

1 个答案:

答案 0 :(得分:3)

尝试绑定到IList的类型,因为这也是您尝试绑定的类型。

ModelBinders.Binders.Add(typeof(IList<string>), new TagModelBinder());

希望它有所帮助。