2011-04-16 16 views
8

Estoy usando webmatrix, sintaxis de afeitar y archivo cshtml.Cómo establecer el valor de la propiedad seleccionada de un elemento de selección

Tengo una página de "edición" para un registro de base de datos que contiene un cuadro de selección (id = "selStatus"). Estoy tratando de establecer el valor "seleccionado" de la casilla de selección de forma dinámica, en función del valor del registro actual que se está editando.

Tengo el valor actual o su índice en var locales, pero parece que no puedo asignar este valor a la selección.

if (currentStatus=="Completed"){ 
    selStatus.options[1].selected=true; 
} 

RES = error: El nombre 'selStatus' no existe en el contexto actual.

Me falta algo obvio aquí, pero parece que no puede conseguirlo. Cualquier idea apreciada. Gracias

Respuesta

4

Además de usar Javascript, puede establecer el elemento seleccionado cuando crea el menú desplegable.

Esto funcionará cuando tenga un menú desplegable generado dinámicamente. Si su menú desplegable es estático, entonces necesita usar javascript.

Primero, cree los datos que va a llenar el menú desplegable:

var selectQ = "SELECT StatusName, StatusID FROM MyStatusTable"; 
List<SelectListItem> statusdropdownlistdata = new List<SelectListItem>(); 
bool isSelected = false; 
foreach(var item in db.Query(selectQ)){ 
    isSelected = false; 
    if(item.StatusName == "Completed"){ 
     isSelected = true; 
    } 
    statusdropdownlistdata.Add(new SelectList Item 
    { 
     Text = item.StatusName, 
     Value = item.StatusID.ToString(), 
     Selected = isSelected 
    }); 
} 

Lo anterior va a crear los datos que desea agregar a la lista desplegable y seleccione un elemento que cumple con los criterios. Tendrá que modificar para trabajar con su criterio y lógica específicos.

A continuación, añadir esto a la parte HTML de su cshtml:

@Html.DropDownList("StatusTypes", statusdropdownlistdata) 

Lo anterior hará que la lista desplegable con un ID = "StatusTypes" y sus datos desplegables con elemento seleccionado.

Busque Html.DropdownList y probablemente pueda encontrar otras opciones y formas de hacerlo.

  • no estoy seguro de si este código funcionará, ya que lo estoy escribiendo por la memoria
+0

'System.Web.Mvc.HtmlHelper ' no tiene ningún método aplicable llamado 'DropDownList' pero parece tener un método de extensión con ese nombre. Los métodos de extensión no se pueden distribuir dinámicamente. Considere enviar los argumentos dinámicos o llamar al método de extensión sin la sintaxis del método de extensión. –

5

en el sitio de disposición:

@{ 
    if (!IsPost) 
    { 
     PageData["accountType"] = 0; /* default value */ 
    } 
} 
<html> 
    <head></head> 
    <body> 
     <form action="@Href("~/")" method="post"> 
      <select name="accountType"> 
       <option value="0"@(PageData["accountType"] == 0 ? " selected" : "")>Standard</option> 
       <option value="1"@(PageData["accountType"] == 1 ? " selected" : "")>Golden</option> 
       <option value="2"@(PageData["accountType"] == 2 ? " selected" : "")>Ultimate</option> 
      </select> 
     </form> 
    </body> 
<html> 

y en el otro sitio que pueda acceder a ella con algo como

var accountType = Convert.ToInt32(Request["accountType"]); 

tarde la puso para sus necesidades con

PageData["accountType"] = (required int value); 
19

Si usted tiene una lista estática de opciones, por ejemplo, de estado civil, se puede mantener más legible (para algunos de nosotros) así:

<select> 
    <option value="Single" @(marStat == "Single" ? "selected" : "")>Single</option> 
    <option value="Married" @(marStat == "Married" ? "selected" : "")>Married</option> 
    <option value="Divorced" @(marStat == "Divorced" ? "selected" : "")>Divorced</option> 
    <option value="Widowed" @(marStat == "Widowed" ? "selected" : "")>Widowed</option> 
</select> 

Lo que esto hace es que si su variable de matorra marStat que contiene el valor que recuperó de la base de datos coincide con la cadena en la condición, convierte "seleccionado" en el HTML. Es un poco de estilo "bruto" pero creo que es muy legible.

0

Me sentí bien agregar esto también, que es como lo hice.También puede pasar el valor al ViewBag desde el controlador y tomarlo y hacer la comparación dentro de la vista. Vea a continuación: Aquí, en la vista que paso por el valor de la ViewBag -

ViewBag.degreeLevel = userInfo.educationlevel; (información del usuario es sólo mi objeto)

Entonces, hago las comparaciones en la vista, como a continuación: enter image description here

Cuestiones relacionadas