2012-03-20 16 views
5

私は3つのDropDownListsを持っています。最初のDropDownListの特定の値を選択した場合は、2番目のドロップダウンリストを有効にする必要があります。たとえば、「Player 3」が選択されている場合、他の2つのDropDownListを有効にする必要があります。ただし、「Player 2」が選択されている場合は、最後のDropDownListを無効にし、2番目を有効にします。MVCの最初のdropdownlistforの値に基づいて2番目と3番目のドロップダウンリストを有効にする

どうすれば簡単に行うことができますか?私はまずMVC 3 EFモデルを使用しています。 これが私の見解では私のコードです:

<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

プレイヤーがモデルで選択されたか、クライアント側で選択されたプレイヤーであることを意味しますか?それがクライアント側の場合、JQuery/Javascriptを使用して以下の答えが動作を得ることができる唯一の方法です。それがサーバー側にある場合は、いくつかのif文で簡単に実行できるはずです。 – Khelvaster

答えて

2

あなたは他人を有効/無効にする現在選択されている値に基づいて、最初のドロップダウンの.change()イベントをサブスクライブし、可能性:

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

私はそのスクリプトを作成しましたが、スクリプトは機能しません。 IveはMozilla Firefox Firebugを使用していましたが、スクリプトがロードされていましたが、プレーヤーを選択すると、他のドロップダウンリストを実際に無効に変更するようなことはありません。 –

+0

@ps__、あなたがスクリプトをデバッグしたとき、changeメソッド内の 'value'変数の値は何でしたか?それは 'Player3'でしたか?それとも、「Player2」ですか?あるいは何も起こらなかった理由を説明する何か他のものかもしれません。 –

+0

これは値が実際に私たちのIDのものである、つまりプレイヤー2がID 2を持っているようです。だから、値を "Player2"ではなく "value == '2"に変更しました。それは私の悪かったです。とにかく助けてくれてありがとう! –

3

私は考えjqueryの中で次の操作を行います

0:

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

それから私は、アクションコントローラになります

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

これは、そのプレーヤーに関連するすべてのポーションで値を入力します。

関連する問題