Asp.Net MVC DropDownListFor: как значение может быть целым объектом - PullRequest
1 голос
/ 26 января 2012

Мне нужно в одном представлении выбирать только несколько элементов в списке.Элемент моего списка - сложный тип.

Я получаю в viewBag список всех элементов, которые я могу выбрать.

Я безуспешно пробовал несколько вещей, самая подходящая вещь из того, что я хочу, этоэто:

@{SelectList list = new SelectList(ViewBag.Entities, Model);}
@Html.DropDownListFor(x => x, list);

У вас есть идея о том, как использовать это?

РЕДАКТИРОВАТЬ: Пробовал это тоже:

@ Html.DropDownListFor (x => x, новый SelectList (ViewBag.Entities, "", "Name"));

EDIT2: также пытался изменить мою модель, имея"int" как идентификатор, представляющий текущий идентификатор объекта

@Html.DropDownListFor (x => x, новый SelectList (ViewBag.Entities, "Id", "Name"));

Еще есть исключение:

System.ArgumentException was unhandled by user code
  Message=Value cannot be null or empty.
Parameter name: name
  Source=System.Web.Mvc
  ParamName=name
  StackTrace:
       at System.Web.Mvc.Html.SelectExtensions.SelectInternal(HtmlHelper htmlHelper, String optionLabel, String name, IEnumerable`1 selectList, Boolean allowMultiple, IDictionary`2 htmlAttributes)
       at System.Web.Mvc.Html.SelectExtensions.DropDownListFor[TModel,TProperty](HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList, String optionLabel, IDictionary`2 htmlAttributes)
       at System.Web.Mvc.Html.SelectExtensions.DropDownListFor[TModel,TProperty](HtmlHelper`1 htmlHelper, Expression`1 expression, IEnumerable`1 selectList)
       at ASP._Page_Areas_Account_Views_Auth_EntityChooser_cshtml.Execute() in d:\Workspace\XYZ\Main\Code\AdManager\Areas\Account\Views\Auth\EntityChooser.cshtml:line 20
       at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
       at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
       at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage)
       at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance)
       at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer)
       at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult)
       at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass1c.<InvokeActionResultWithFilters>b__19()
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
  InnerException: 

Ответы [ 2 ]

2 голосов
/ 26 января 2012

Решение Наконец-то я нашел способ сделать это:

@Html.DropDownListFor(x => x.SelectedId, new SelectList(
    Model.AvailableEntities, "Id", "Name"));

Мне пришлось добавить в мою модель свойство, которое может хранить значение.Кажется, что DropDownListFor на самом деле не нравится, что у меня есть это x => x

1 голос
/ 26 января 2012

Метод, который вы вызываете, определяет Модель как SelectedValue.Вы должны дать имена для dataValueField и dataTextField:

@{SelectList list = new SelectList(ViewBag.Entities, "Key", "Value");}
@Html.DropDownListFor(x => x, list);

, учитывая, что ViewBag.Entities является Dictionary.Если он содержит список ваших собственных объектов, просто укажите свойства, которые вы хотите использовать, а не ключ и значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...