2012-06-21 40 views
6

En mi aplicación MVC3 tengo una lista desplegable. Allí tengo que mostrar todos los resultados, pero algunos resultados deben estar deshabilitados, para que no sean seleccionables. ¿Cómo puedo hacer eso?DropDownListPara devolución de llamada o declaración if

Esto es lo que tengo ahora. Simplemente no muestra los jugadores que tienen Desactivado establecido en verdadero.

@Html.DropDownListFor(m => m.Position1, Model.SelectedTeam.TeamPlayers 
        .Where(c => c.Player.Disabled == false) 
        .OrderBy(t => t.Player.Lastname) 
        .ToSelectList(m => m.FullName, m => m.PlayerId)) 

Entonces, ¿hay otra manera de mostrar también los jugadores de movilidad, pero que la salida iba a ser así, en lugar de ocultarlos por completo:

<select> 
    <option>Player 1</option> 
    <option disabled="disabled">Player 2</option> 
    <option>Player 3</option> 
    <option>Player 4</option> 
    <option disabled="disabled">Player 5</option> 
    <option>Player 6</option> 
</select> 

¿Eso es posible con un DropDownListFor?

+3

Siempre se puede utilizar un método de extensión y escribir su propio? – Kane

+0

Nunca pongas consultas de Linq en las Vistas –

Respuesta

2

OK, aquí está la 'manera difícil' de hacerlo. :) Tal vez alguien más tendrá una mejor idea.

En primer lugar, que había necesidad de diferir entre las entradas válidas y discapacitados en la lista de selección - y única manera de hacerlo es o bien por value o text del option. Digamos que los valores no válidos tendrán la value == "disabled", de lo contrario es una identificación válida:

//Somewhere in the controller 
... 
var list = yourViewModel.SelectedTeam.TeamPlayers.OrderBy(p => p.LastName).Select(new SelectListItem 
    { 
     Text = item.LastName, 
     Value = item.Disabled ? "disabled" : item.PlayerId.ToString() 
    }).ToList(); 

//pass it however you want, in the model or by ViewBag 
ViewBag.MyDropDownList = new SelectList(list, "Value", "Text"); 

Y luego en la vista

@Html.DropDownListFor(model => model.Position1, ViewBag.MyDropDownList as SelectList); 
$(document).ready(function() 
{ 
    $(#"Position1 option[value=\"disabled\"]").prop("disabled",true); 
}); 
+0

. Bien, lo tengo trabajando con esto :) – w00

Cuestiones relacionadas