MVC

2012-03-20 19 views
5

için ilk açılır listenin değerine göre ikinci ve üçüncü açılır listeyi etkinleştirmek için üç DropDownList ürünüm var. İlk DropDownList öğesinden belirli bir Değer seçilirse, ikinci Açılır Listenin etkinleştirilmesi gerekir. Örneğin, "Player 3" seçildiyse, diğer iki DropDownList etkinleştirilmelidir, ancak eğer "Player 2" seçilirse, son DropDownList devre dışı bırakılmalı ve ikincisi etkinleştirilmelidir.MVC

Bunu nasıl kolayca yapabilirim? Önce MVC 3 EF modelini kullanıyorum. Bu benim görünümünde benim kodudur:

<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

Eğer modelde bir oyuncu seçildiyse veya müşteri tarafında seçildiyse? İstemci tarafı ise, JQuery/Javascript kullanarak aşağıdaki cevap, herhangi bir davranışa sahip olmanın tek yoludur. Sunucu tarafındaysa, birkaç if deyimi ile bunu kolayca yapabilmeniz gerekir. – Khelvaster

cevap

2

Şu anda seçili değerine dayalı ardından ilk açılır listesinin .change() olaya abone ve olabilir başkalarını devreye sokar /:

$(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

Bu senaryoyu yaptım, ancak betiğim işe yaramıyor gibi görünüyor. Mozilla Firefox Firebug'u kullandım ve betikler yüklenmeye başladı, ancak bir oyuncu seçtiğimde, betikler diğer dropdown listelememi gerçekten devre dışı bırakacak gibi görünmüyor. –

+0

@ps__ ve komut dosyanızda hata ayıkladığınızda, değişiklik yöntemindeki "value" değişkeninin değeri neydi? Oyuncu 3'tü? Yoksa Player2' miydi? Ya da hiçbir şeyin neden olmadığını açıklayan başka bir şeydi. –

+0

Tamam, aslında bizim kimliğimizden olduğu gibi görünüyor, yani Oyuncu 2 ID 2'ye sahip. Bu yüzden değeri "Player2" yerine "value == '2'" olarak değiştirdim. Benim kötüyüm. Yardımlarınız için teşekür ederim! –

3

isterim jquery aşağıdakileri yapın:

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

Sonra ben eylem denetleyicisi olacaktır:

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 }; 
} 

Bu, değerleri ilgili oynatıcıyla ilgili tüm yayınlarla dolduracaktır.