7

私は現在 ASP.NET MVC を学習しており、Nhibernate を使用しています。

カスケード ドロップダウン ボックスを使用したいと考えています。MVC でカスケード ドロップダウン ボックスを動作させることができた人はいますか?

更新: 次の Web サイトを参照しました:リンク テキストと使用された方法 1.

コントローラーコード

        var makeList = new SelectList(makeRepository.ListMakes (), "Id", "make",1);
        ViewData["Makes"] = makeList;

        //// Create Models view data
        var modelList = new CascadingSelectList(modelRepository.ListModels (Convert.ToInt32(makeList.SelectedValue.ToString())), "ModelID","Id", "Name");
        ViewData["Models"] = modelList;

コードを表示

<%= Html.DropDownList("--Select Make--","Makes")%>
<label for="Makes">Car Model:</label>    
<%= Html.CascadingDropDownList("Models", "Makes") %> 

ID が 1 の Make を選択すると正しい車のリストが表示されますが、別の Make を選択するとモデル リストが空になりますか?

4

4 に答える 4

8

このTIPをお読みになることをお勧めします。

このヒントでは、Stephen Walter がカスケード ドロップダウン リストを作成する 3 つの方法を示します。最初に、別のドロップダウン リストのオプションが変更されたときに、あるドロップダウン リストによって表示されるオプションのリストを変更する方法を示します。次に、コントローラー アクションを介してドロップダウン リストのデータを公開する方法を示します。次に、Web サービスからドロップダウン リストのデータを取得する方法を示します。

于 2009-04-01T13:44:50.630 に答える
4

まさにこれについて私が数週間前に作成した投稿をご覧になることをお勧めします。

まず、JsonResult コントローラー アクションをセットアップする必要があります。

/// <summary></summary>  
/// Get Models
/// <param name="makeID" />  
/// <returns></returns>  
public JsonResult GetModels(string id)  
{       
   JsonResult result = new JsonResult();       
   var filteredModels = from model in homeViewModel.Models
                        where model.MakeID.ToString() == id
                        select model;       result.Data = filteredModels.ToList();
   result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;    
   return result;  
} 

このメソッドにより、気の利いた$.getJSONjquery 呼び出しを使用できるようになりました。呼び出しの署名は次のとおりです。

jQuery.getJSON( url, [ data ], [ callback(data, textStatus) ] )

Makes 用と Models 用の 2 つのドロップダウン リストを設定したとします。

   Html.DropDownListFor((model) => model.MakeID, new SelectList(Model.Makes, "ID", "Description"))    
   Html.DropDownListFor((model) => model.ModelID, new SelectList(Model.Models, "ID", "Description"))

次のjqueryを含めることができます

//Hook onto the MakeID list's onchange event  
$("#MakeID").change(function() {   
   //build the request url   
   var url = '<!--Url.Content("~/")-->' + 'Home/GetModels';

   //fire off the request, passing it the id which is the MakeID's selected item value   
   $.getJSON(url, { id: $("#MakeID").val() }, function(data) {    
      //Clear the Model list    
      $("#ModelID").empty();    
      //Foreach Model in the list, add a model option from the data returned    
      $.each(data, function(index, optionData) {       
         $("ModelID").append("<option value=" + optionData.ID +">"+ optionData.Description +"</option>"  );    
      });
   });  
}).change();

恥知らずなプラグインでごめんなさい:(

于 2010-05-20T19:00:13.317 に答える
2

このためのjQueryプラグインを作成しました。

http://weblogs.asp.net/rajbk/archive/2010/05/20/cascadingdropdown-jquery-plugin-for-asp-net-mvc.aspx

于 2010-05-20T18:54:05.440 に答える
1

使用しているヒント:ASP.NET MVCヒント#41 –StephenWaltherのAjaxを使用してカスケードドロップダウンリストを作成するMVCRealease1.0では実行されませんでした

そのため、ダウンロードしたプロジェクトでは(いくつかの小さな問題を修正した後)正常に機能しますが、MVCリリース1.0に組み込むと問題が発生します。

例:ダウンロードしたプロジェクトでは、スクリプトはコンテンツフォルダーにあり、リリース1.0では、スクリプトはスクリプトフォルダーにあります。

また、リリース内の* .jsファイルの一部(すべてではないにしても)が賭けとCTPから変更されました。これも問題になる可能性があります。

私は彼のプロジェクトをダウンロードし(いくつかのマイナーな問題を修正しました)、それはそのプロジェクト(* .jsファイル)内で正常に機能しました。

例えば、

私は次のように修正しました:

変化する:\Views\Home\index.aspx

<label for="Makes">Car Make:</label>  
<%= Html.DropDownList("--Select Make--", "Makes") %>

に:

<label for="Makes">Car Make:</label>
<%= Html.DropDownList("Makes", (SelectList)ViewData["Makes"], "--Select Make--")%>

ご覧のとおり、いくつかの問題があります。

チュートリアルやブログに関するこれらのタイプの問題は豊富です。誰もがリリースされる新しいテクノロジーの「エキスパート」と見なされることを望んでいるため、ベータ版とCTPに関するチュートリアルを作成します。その結果、「エキスパート」には最終リリースでは機能しないものが含まれることになります。

あなたが見つける必要があるのは、チュートリアルを投稿したプロフェッショナルです。専門家は、チュートリアルが機能することを確認します。私が専門家とは、その技術分野の専門家のトレーナーを意味します。

Stephen Waltherは、優れたブログの1つと多くの優れたブログを持っていますが、彼はMicrosoiftEvangelistであることを忘れないでください。彼はMSテクノロジーに関する本を執筆しているので、ブログの世界で積極的に活動する必要があります。そうすれば、最先端のテクノロジーに優れたものをいくつか出すことができます。これにより、彼は専門家と見なされ、本を販売できるようになります。

「エキスパート」に関係なく、最終リリースで情報を使用しようとすると、ブログ/執筆(ベータ版とCTPに基づく)に不正確さが生じることを覚えておいてください。

于 2009-04-10T23:34:20.730 に答える