#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 варианта.
- Измените существующий объект TipoUsuarioBO, чтобы добавить другое свойство с именем selectedId,
или
-
Создайте новую модель со следующим объявлением.
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"})