У меня есть текстовое поле, на мой взгляд, что я хочу получить значение в виде списка строк.MVC custom model binder issue
В качестве примера, если кто-либо входит: tag1, tag2, tag3 ... получает список с 3 элементами.
Я сделал пользовательское связующее устройство, но я все еще получаю от поста строку вместо списка.
Это вещи, которые я сделал:
Это моя модель:
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» моего пользовательского вяжущего.
Наверняка им что-то не хватает. Могли бы вы дать мне руку?
Вы когда-нибудь получали лучший ответ на этот вопрос? –