我的视图中有一个文本框,我希望以字符串列表的形式接收值。
例如,如果有人输入: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”。
肯定我什么都没发现。你能帮我个忙吗?
答案 0 :(得分:3)
尝试绑定到IList的类型,因为这也是您尝试绑定的类型。
ModelBinders.Binders.Add(typeof(IList<string>), new TagModelBinder());
希望它有所帮助。