Выбор элемента динамического списка в HTML

#c# #html #asp.net-mvc

#c# #HTML #asp.net-mvc

Вопрос:

Я делаю приложение для управления, у пользователей есть часть, в которой у меня есть форма с a <select></select> , которая заполняется из

 @{ Html.RenderAction ("ListaTipoDeUsuarios", new {selected = 0}); }
  

Это (Index.cshtml):

 ...
<div class="lg-xs-12">
   <label>Tipo Usuario</label>
   <select name="tipoUsuario" class="form-control" >
      @{Html.RenderAction("ListaTipoDeUsuarios", new { selected = 0 });}                                
   </select>
</div>
....
  

У меня есть моя функция в контроллере, которая выполняет запрос для вывода списка типов пользователей (HomeController.cs)

 [ChildActionOnly]        
public PartialViewResult ListaTipoDeUsuarios()
{
  string dtTipoUser = client.GetTiposUsuario("{}");
  DataTable dt = (DataTable)JsonConvert.DeserializeObject(dtTipoUser, typeof(DataTable));
  List<TipoUsuarioBO> listaTiposUsuarios = new List<TipoUsuarioBO>();
  foreach (DataRow row in dt.Rows)
  {
    TipoUsuarioBO tipoUsuario = new TipoUsuarioBO();
    tipoUsuario = TiposUsuarioBR.MapeoTipoUsuario(row, tipoUsuario);
    listaTiposUsuarios.Add(tipoUsuario);
  }      
  return PartialView(listaTiposUsuarios);
}
  

И мое представление со списком (ListaTipoDeUsuarios.cshtml)

 @foreach (var item in Model)
{
    <option value="@item.Id">@item.Id - @item.Descripcion</option>
}
  

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

ПРИМЕЧАНИЕ: Попробуйте изменить «0» в «new selected = {0}», но ничего не делает.

Комментарии:

1. Вы ищете способ выбрать опцию, когда все параметры отображаются? если да, то обратитесь ниже

2. Пожалуйста, обратите внимание, что тег model-view-controller предназначен для вопросов о шаблоне. Для реализации ASP.NET-MVC существует специальный тег.

3. Правильно создайте представление, используя строго типизированный @Html.DropDownListFor() метод для привязки к вашему свойству модели

Ответ №1:

Вам нужно будет изменить модель PartialView, которая отображает параметры. У вас есть 2 варианта.

  1. Измените существующий объект TipoUsuarioBO, чтобы добавить другое свойство с именем selectedId,

или

  1. Создайте новую модель со следующим объявлением.

     public class OptionsModel <-- Rename to naming conventions
    { 
        public List<TipoUsuarioBO> TipoUsuarioBO { get; set; }
        public int SelectedID {get; set; }
    }
      

И при отображении элементов опций используйте следующее

 @foreach (var item in Model.TipoUsuarioBO)
{
    <option value="@item.Id" @Html.Raw(@item.Id == Model.SelectedID ? "selected" : "") >@item.Id - @item.Descripcion</option>
}    
  

Ответ №2:

Почему вы не пытаетесь использовать List<SelectListItem> в качестве модели представление ListaTipoDeUsuarios.cshtml.

 [ChildActionOnly]        
public PartialViewResult ListaTipoDeUsuarios()
{
  string dtTipoUser = client.GetTiposUsuario("{}");
  DataTable dt = (DataTable)JsonConvert.DeserializeObject(dtTipoUser, typeof(DataTable));
  List<SelectListItem> listaTiposUsuarios = new List<SelectListItem>();
  foreach (DataRow row in dt.Rows)
  {
    TipoUsuarioBO tipoUsuario = new TipoUsuarioBO();
    tipoUsuario = TiposUsuarioBR.MapeoTipoUsuario(row, tipoUsuario);
    listaTiposUsuarios.Add(new SelectListItem()
      {
        Text = tipoUsuario.Id "-" tipoUsuario.Descripcion,
        Value = tipoUsuario.Id.ToString(),
        Selected = true //if you want this item selected otherwise false
      });
  }      
  return PartialView(listaTiposUsuarios);
}
  

и ваше представление

 @Html.DropDownList("The name of the field", Model, new { @class = "any-class"})