как получить строку из выпадающего списка - PullRequest
0 голосов
/ 20 августа 2010

У меня есть этот код в моем контроллере для представления индекса ..

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

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

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

Когда я пытаюсь получить значение Selected Dropdownlist из View в контроллер, я получаю доступ вот так ..

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

Я ожидаю, что CategoryName должно быть строкой, как то, что я показываю в выпадающем списке.

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

это что-то, что я делаю неправильно

спасибо

Ответы [ 3 ]

1 голос
/ 20 августа 2010

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

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

Кроме того, Model.ServiceTypeListAll уже является SelectList;Вам не нужно оборачивать это:

<%=Html.DropDownList("ServiceTypeListAll", Model.ServiceTypeListAll)%>
1 голос
/ 20 августа 2010

Ваш вызов 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>

Атрибут value предназначен для того параметра, который будет выбран в 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 ...

1 голос
/ 20 августа 2010

Вот так выглядит окно выбора в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...