/ / Elegir el elemento seleccionado para la lista desplegable en acción - c #, asp.net-mvc, selectlist

Eligiendo el elemento seleccionado para la lista desplegable en acción - c #, asp.net-mvc, selectlist

Tengo una página que permite a los usuarios cambiar su configuración de privacidad para:

  • Sus recetas publicadas
  • Su perfil
  • Sus listas publicadas

Estoy tratando de formar mi código para que cuando lalos usuarios cargan esta página, las listas desplegables que utilizan para seleccionar su configuración de privacidad muestran su configuración actual, por lo que si tienen su receta de privacidad configurada en "Usuarios registrados", cada vez que carguen la página de configuración de privacidad quiero comenzar con " Usuarios registrados "seleccionados.

Inicialmente creo una lista de SelectListItem instancias llamadas PrivacySettings

List<SelectListItem> PrivacySettings = new List<SelectListItem>();

PrivacySettings.Add(
new SelectListItem
{
Text="Anybody",
Value = "0"
});
PrivacySettings.Add(
new SelectListItem
{
Text = "Registered users",
Value = "1"
});
PrivacySettings.Add(
new SelectListItem
{
Text = "Only me",
Value = "2"
});

Entonces creo tres separadas SelectList instancias. Aquí está la parte donde asigno el valor seleccionado para cada una de las listas al primer valor que coincida con la configuración guardada del usuario.

SelectList RecipePrivacyList = new SelectList(
PrivacySettings,
"Value",
"Text",
PrivacySettings.First(x => x.Value == LoggedInUser.RecipePrivacy.ToString()));


SelectList ProfilePrivacyList = new SelectList(
PrivacySettings,
"Value",
"Text",
PrivacySettings.First(x => x.Value == LoggedInUserProfile.Privacy.ToString()));

SelectList ListPrivacyList = new SelectList(
PrivacySettings,
"Value",
"Text",
PrivacySettings.First(x => x.Value == LoggedInUser.ListPrivacy.ToString()));

Luego les asigno a cada uno de estos por separado. ViewData llaves

ViewData["RecipePrivacy"] = RecipePrivacyList;
ViewData["ProfilePrivacy"] = ProfilePrivacyList;
ViewData["ListPrivacy"] = ListPrivacyList;

En mi opinión los recupero y los almaceno en variables

var ProfilePrivacy = (SelectList)ViewBag.ProfilePrivacy;
var RecipePrivacy = (SelectList)ViewBag.RecipePrivacy;
var ListPrivacy = (SelectList)ViewBag.ListPrivacy;

Y finalmente utilizo el Html.DropDownList() Método auxiliar para crear las listas utilizando las variables antes mencionadas.

@Html.DropDownList("profile-privacy", ProfilePrivacy, new { @class = "profile-privacy" })

Cuando se carga la vista, se selecciona el primer valor ("Cualquiera" o el valor 0) independientemente de la configuración real del usuario.

Respuestas

1 para la respuesta № 1

Tienes que configurar el elemento seleccionado de la SelectList como eso:

SelectList ListPrivacyList = new SelectList(
PrivacySettings,
"Value",
"Text",
PrivacySettings.First(x => x.Value == LoggedInUser.ListPrivacy.ToString()).Value);