У меня есть текстовое поле в моем представлении, которое я хочу получить значение в виде списка строк.
Например, если кто-нибудь введет: 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» моего пользовательского связывателя.
Конечно, я что-то упустил. Не могли бы вы дать мне руку?