У меня очень короткий вопрос.
В mvc есть метод статического расширения
System.Web.Mvc.Html.InputExtensions.HiddenFor(this HtmlHelper<TModel>htmlhelper,Expression<Func<TModel,TProperty>> expression,object htmlAttributes)
Я использую этот метод для создания DropDownList на основе HiddenField.
public static MvcHtmlString CreateDropDown<TModel, TProperty, TKey, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IEnumerable<ObjectData<TKey, TValue>> items, object htmlAttributes)
{
var resultVar = System.Web.Mvc.Html.InputExtensions.HiddenFor(helper, expression, htmlAttributes.ToRouteValueDictionary(new { @class = "DropDownInputHidden" }));
//some other code...
return resultVar;
}
А что касается свойства простого типа, то такие HiddenFields легко создавать. В связи с этим я использую это так:
@Html.CreateDropDown(t=>t.SelectedValue,(some items list),(some attributes)) // t.SelectedValue is property of type string
Но теперь я хочу создать много скрытых полей на основе свойства, которое реализует интерфейс IList. Функция должна выглядеть так:
public static MvcHtmlString CreateDropDown<TModel, TProperty, TKey, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, IEnumerable<ObjectData<TKey, TValue>> items, object htmlAttributes)
{
StringBuilder resultVar =new StringBuilder();
for (int i = 0; i < items.Count(); i++)
{
Expression<Func<TModel,TProperty>> ExpressionThatWillPointTo_i_Element = ???;
//ExpressionThatWillPointTo should be "based" on expression that is "pointing" to List<string>;
resultVar.Append(System.Web.Mvc.Html.InputExtensions.HiddenFor(helper, ExpressionThatWillPointTo_i_Element, htmlAttributes.ToRouteValueDictionary(new { @class = "DropDownInputHidden" })));
}
//some other code...
return MvcHtmlString.Create(resultVar.ToString());
}
и после этого я смогу вызвать эту модифицированную функцию следующим образом:
@Html.CreateDropDown(t=>t.SelectedManyValues,(some items list),(some attributes)) // t.SelectedManyValuesis property of type List<string>
Так что мне нужно как-то изменить выражение, чтобы получить каждое значение из выражения.
У кого-нибудь есть идеи?