2010-08-19 3 views
0

У меня есть этот код в мой контроллер для Индексный ..как получить строку из выпадающего списка

public ActionResult Index(int? id) 
     { 
      _viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeName"); 
      return View(_viewModel); 
     } 

Используя это Я могу Dispaly все ServiceTypes на мой взгляд, в DROPDOWNLIST коробке. код

<%=Html.DropDownList("ServiceTypeListAll", new SelectList(Model.ServiceTypeListAll,"Value","Text"))%> 

Когда я пытаюсь получить выбранное значение DropDownList с видом на контроллер Я acceesing, как это ..

string categoryName = collection["ServiceTypeListAll"]; // collectoin refers FormCollection 

Я ожидаю CategoryName должна быть строка, как то, что когда-нибудь я в окне Dropdownlist.

Я получаю Целочисленные значения?

что somethign я делаю неправильно

благодаря

+0

Не называть 'ToList()' вообще. – SLaks

ответ

1

значение DropDownList является ID свойство, которое вы указываете в качестве ServiceTypeId.
Вам необходимо указать идентификатор как ServiceTypeName вместо этого, как это:

_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().OrderBy(n => n.ServiceTypeName), "ServiceTypeName", "ServiceTypeName"); 

Кроме того, Model.ServiceTypeListAll уже SelectList; Вам не нужно обернуть его:

<%=Html.DropDownList("ServiceTypeListAll", Model.ServiceTypeListAll)%> 
+0

Его работа отлично, что я ожидаю .. спасибо – user354625

+0

SLaks .. Can вы поможете мне еще одна моя проблема! Пожалуйста .. Я отправлю различный вопрос Plese заглянуть в это .. спасибо – user354625

+0

SLaks .. Пожалуйста, не заходите к этому сообщению .. http://stackoverflow.com/questions/3526894/how-to-show- dropdownlist-value-on-edit-using-asp-net-mvc – user354625

1

Это то, что выбрать окно выглядит в HTML

<select> 
    <option value="1">Item 1</option> 
    <option value="2">Item 2</option> 
    <option value="3">Item 3</option> 
</select> 

Так значение, которое вы получаете в вашем контроллере выбранное значение из поле выбора, и это число.

Если вы хотите использовать текстовые элементы, то есть две возможности:

1) установить значение опции к значению текста

public ActionResult Index(int? id) 
{ 
    _viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeId", "ServiceTypeId"); 
    return View(_viewModel); 
} 

2) после получения значения INT загрузить соответствующий объект из хранилища

int categoryId = Convert.ToInt32(collection["ServiceTypeListAll"]); 
string categoryName = _bvRepository.Get(categoryId); // or whatever method loads your object 
+0

Мне не нужен номер Мне нужен Item1 или Item 2 .. в моем контроллере. спасибо – user354625

+0

Только что обновил мой ответ, чтобы включить решение для этого – davehauser

+0

Dave благодарит за ваше обновление и спасибо за ваше время .. Решение SLaks работало для меня Great .. Thanks – user354625

1

Ваш призыв к Html.DropDownList() будет производить HTML, который выглядит следующим образом:

<select name="ServiceTypeListAll"> 
    <option value="1">Service Type 1</option> 
    <option value="2">Service Type 2</option> 
    <option value="3">Service Type 3</option> 
</select> 

для какого варианта выбран атрибут значения, что появится в FormCollection.Если вы действительно хотите ServiceTypeName строку вместо ServiceTypeId, вы можете изменить свой SelectList конструктор так:

_viewModel.ServiceTypeListAll = new SelectList(_bvRepository.GetAllServiceTypes().ToList().OrderBy(n => n.ServiceTypeName).ToList(), "ServiceTypeName", "ServiceTypeName"); 

для получения HTML, который выглядит следующим образом:

<select name="ServiceTypeListAll"> 
    <option value="Service Type 1">Service Type 1</option> 
    <option value="Service Type 2">Service Type 2</option> 
    <option value="Service Type 3">Service Type 3</option> 
</select> 

Также, кстати, вам должны быть в состоянии упростить вам HtmlHelper называть это:

<%=Html.DropDownList("ServiceTypeListAll", Model.ServiceTypeListAll)%> 

Нет необходимости, чтобы создать другой SelectList ...

+0

Спасибо за ваше время peter .. – user354625

Смежные вопросы