4

Kendo UI mvc を使用して asp.net mvc に取り組んでいます。2 つの剣道ドロップダウン リストがあります。1 つは診療所のリスト、もう 1 つは選択した診療所の患者のリストです。しかし、カスケード ドロップダウンリストを使用するために、診療所と患者の間に直接的な関係はありません。そのために、ドロップダウンリストの変更イベントで ajax 呼び出しを使用し、患者のリストを取得しました。これはリストクリニックの最初のドロップダウンリストです

 @(
  Html.Kendo().DropDownList()
  .Name("ddlClinics")
  .Events(e=>e.Change("ChangeClinic"))
  .BindTo(new SelectList((List<Account.Entities.Clinic>)ViewBag.lstClinic,
 "ClinicID", "ClinicName")))

これはlistpatientsの2番目のドロップダウンリストです

@(
 Html.Kendo().DropDownList()
.Name("ddlPatients")
.BindTo(new SelectList((List<Patient>)ViewBag.Patients, 
"PatId", "PatName"))))

最初のドロップダウンリストが変更されたときに、患者のリストを2番目のドロップダウンリストに動的にバインドしたいのですが、

function ChangeClinic()
{
$.ajax({
url: '/Messages/GetPatient',
 type: 'Post',
 data: { email: '@User.Identity.Name' },
 cache: false,
 success: function (result) {
 var ddlPatients = $('#ddlPatients').data('kendoDropDownList');
 var main = [];
 $.each(result, function (k, v) {
 main.push({ "PatId": v.PatId, "PatName": v.PatName });
  });
  ddlPatients.dataTextField = "PatName";
  ddlPatients.dataValueField = "PatId";
  ddlPatients.dataSource.data(main);
  ddlPatients.reload();
 }
 });
}

リストをドロップダウンリストにバインドできますが、すべての項目が「未定義」として表示されます。だから私を導いてください。

4

4 に答える 4

5

私が知る限り、診療所と患者の間には関係があるため、ラッパーで提供されているCascadeFrom ("DropDownList1")を使用できるはずです。学区と学校の関係についても、同様の方法でカスケード ドロップダウンリストを使用します。

@(Html.Kendo().DropDownList()
            .Name("District")
            .HtmlAttributes(new { style = "width:300px;" })
            .BindTo(ViewBag.districts)
            .DataTextField("DistrictName")
            .DataValueField("DistrictID")
            .OptionLabel("Select District")
)
@(Html.Kendo().DropDownList()
            .Name("School")
            .HtmlAttributes(new { style = "width:300px;" })
            .CascadeFrom("District")
            .BindTo(ViewBag.schools)
            .DataTextField("SchoolName")
            .DataValueField("SchoolID")
            .OptionLabel("Select School")
)
于 2012-11-20T21:38:14.033 に答える
2

最初の DropDown 値に基づいて 2 番目の DropDown を埋めたい場合。Telerik提供、

.CascadeTo("DropDownList2")

詳細は以下のリンクをご覧ください。

Telerik ドロップダウンリストでのドロップダウンのカスケード

于 2012-11-01T11:27:17.160 に答える
2

dataSource には役に立たないような配列を作成する代わりに、次のように使用します。

success: function (result) {
 var ddlPatients = $('#ddlPatients').data('kendoDropDownList');
 var main = [];
 $.each(result, function (k, v) {
 main.push({ "text": v.PatId, "value": v.PatName });
  });

  ddlPatients.dataSource.data(main);
 }
 });
于 2012-11-01T20:14:28.873 に答える
0

使用していない場合

.DataSource(source =>
                        {
                            source.Read(read =>
                            {
                                read.Action        ("FunctionName", "ControllerName").Data("filterDropdown1");
                            }).ServerFiltering(true);
                        })
.CascadeFrom("Dropdown1")

2 番目のドロップダウンの定義のプロパティであり、上記の問題で言及されている定義を使用しています。すなわち:-

@(
 Html.Kendo().DropDownList()
.Name("ddlPatients")
.BindTo(new SelectList((List<Patient>)ViewBag.Patients,"PatId", "PatName"))
)

次に、ajax投稿の成功関数で、データを2番目のドロップダウンに直接バインドできます。

    function ChangeClinic()
        {
        $.ajax({
        url: '/Messages/GetPatient',
         type: 'Post',
         data: { email: '@User.Identity.Name' },
         cache: false,
         success: function (result) {
         $('#ddlPatients').data('kendoDropDownList').dataSource.data(result);
             //ddlPatients.reload();

  }
         });
        }

@注:- 1) 結果の値には、GetPatient コントローラーの関数「Messages」に渡されたパラメーター email に基づいて、プロパティ「PatId」および「PatName」を持つ新しい患者のリストが含まれている必要があり、ddlpatients は必要ありません。 reload()、実際には.reload()はサポートされていません。実行が中断されるため、.reload() は使用しないでください。

于 2015-03-10T08:10:26.950 に答える