2012-03-20 10 views
5

Ho tre elenchi a discesa. Se viene scelto un valore specifico dal mio primo DropDownList, il secondo elenco a discesa dovrebbe essere abilitato. Ad esempio, se è stato scelto "Player 3", gli altri due DropDownList dovrebbero essere abilitati, tuttavia, se si sceglie "Player 2", l'ultimo DropDownList dovrebbe essere disabilitato e il secondo abilitato.Abilitazione della seconda e della terza lista a discesa in base al valore della prima lista a discesa per MVC

Come posso farlo facilmente? Sto usando prima il modello EF di MVC 3. Questo è il mio codice a mio avviso:

<p>Player</p> 
    <div class="editor-field"> 
     @Html.DropDownListFor(m => m.PlayerName,Model.SubjectTypes, "Choose player" , new { @class = "selectstyle" }) 
     @Html.ValidationMessageFor(model => model.PlayerName) 
    </div> 

    <p>Position</p> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.PositionName, Model.Consultants, "Choose Position", new { @class = "selectstyle" }) 
     @Html.ValidationMessageFor(model => model.ContactPerson) 
    </div> 

    <p>Team</p> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.TeamName, Model.Teams, "Choose Team", new { @class = "selectstyle" }) 
     @Html.ValidationMessageFor(model => model.ContactPerson) 
    </div> 
+0

Vuoi dire se un giocatore è stato scelto nel modello o scelto dal lato del cliente? Se si tratta del lato client, la risposta seguente, utilizzando JQuery/Javascript, è l'unico modo per ottenere qualsiasi comportamento. Se è sul lato server, dovresti essere in grado di farlo facilmente con alcune istruzioni if. – Khelvaster

risposta

2

Si potrebbe sottoscrivere l'.change() evento della prima discesa e poi in base al valore selezionato abilitare/disabilitare gli altri:

$(function() { 
    $('#PlayerName').change(function() { 
     var value = $(this).val(); 
     if (value == 'Player3') { 
      $('#PositionName, #TeamName').removeAttr('disabled'); 
     } else if (value == 'Player2') { 
      $('#PositionName').removeAttr('disabled'); 
      $('#TeamName').attr('disabled', 'disabled'); 
     } 
    }); 
}); 
+0

Ho fatto quello script, ma il mio script non sembra funzionare. Ive ha utilizzato Mozilla Firefox Firebug e gli script vengono caricati, tuttavia, una volta selezionato un lettore, gli script non sembrano in realtà modificare le mie altre liste a discesa su disattivate. –

+0

@ps__ e quando hai eseguito il debug del tuo script qual era il valore della variabile 'value' all'interno del metodo di modifica? Era 'Player3'? O era 'Giocatore2'? O forse era qualcos'altro che spiegava perché non fosse successo nulla. –

+0

Ok, sembra che il valore sia effettivamente il nostro ID, cioè il giocatore 2 ha l'ID 2. Quindi ho appena cambiato il valore in "value == '2'" invece di "'Player2'". Era il mio cattivo. Grazie comunque dell'aiuto! –

3

lo farei effettuare le seguenti operazioni in jQuery:

$('#PlayerName').change(function() 
{ 
    var id = $(this).val() 
    $.ajax({ 
     url: '@Url.Action("GetPositions")', 
     data: 
      { 
       "id": id, 
      }, 
     success: function (data) 
     { 
      $("#positions").html(data); 
     } 
    }); 
} 

allora avrò nel controller azione:

public JsonResult GetPositions(int id) 
{ 
    var positions = Repository.GetPositionsByPlayerId(id); 
    var hmtl = positions.Select(x => new SelectListItem 
    { 
     Value = x.PositionID.ToString(), 
     Text = x.Name 
    }); 
    return new JsonResult { Data = html }; 
} 

Questo riempirà i valori con tutte le posizioni relative a quel giocatore.

Problemi correlati