0

我正在绑定第一个更改的下拉列表。但我越来越不确定。

这是我尝试过的。在视图中

   <select id="BreakOutValue" class="input1_drop" onchange="onChange()" >
                                                                </select>
<%:Html.DropDownList("DropClient", new SelectList(Model.DropClient, "Value", "Text", Model.txtDropClient), "-- Select  --", new { @class = "input1_drop", id = "DropClient", @onchange = "onClientChange();"})%>

  if ($("#DropClient").val() != '') {
                                   $.ajax({
                                       async: false,
                                       type: 'post',
                                       url: '/Report/BindBreakOutsWithClient_ID',
                                       data: { Client_ID: $("#DropClient").val() },
                                       success: function (data) {

                                           debugger;
                                           // var responseID = eval("(" + data + ")");
                                           // var SystemField = responseID.List;
                                           var items = "";
                                           $.each(data, function (i, data) {
                                              items += "<option value='" + data.Client_ID + "'>" + data.labelname + "</option>";
                                           });
                                           $("#BreakOutValue").html(items);


                                           //                                           $("#BreakOutValue option").remove();
                                           //                                           $("#BreakOutValue").append("<option value=''>-- Select --</option>");
                                           //                                           for (var i = 0; i < data.length; i++) {
                                           //                                               $("#BreakOutValue").append("<option selected='selected' value=" + data.Data[i] + ">" + data.Data[i] + "</option>");
                                           //                                           }
                                       },
                                       error: function (jqXHR, textStatus, errorThrown) {
                                       }
                                   });
                            }
                            return false;
        }

在控制器中

   public ActionResult BindBreakOutsWithClient_ID(string Client_ID)
            {
                int Client = Convert.ToInt32(Client_ID);
               // var qBreakOut = from c in DBReport.ClientMappings orderby c.labelname ascending where c.Client_ID == Client && c.availableinui == true select c;
                var BreakOut = dbReport.ClientMappings.Where(m => m.Client_ID == Client && m.availableinui == true).OrderBy(m => m.labelname).ToList();
                return Json(new { Data = BreakOut });
            }

但我在下拉列表中没有得到任何东西。我越来越不确定。

4

1 回答 1

2

在您的控制器操作中,您为 Json 响应添加了一个Data属性:

return Json(new { Data = BreakOut });

因此,请确保在客户端上循环使用此属性:

var items = "";
$.each(data.Data, function (i, item) {
    items += "<option value='" + item.Client_ID + "'>" + item.labelname + "</option>";
});
$("#BreakOutValue").html(items);

或者,如果您想保留当前代码,则直接返回列表:

return Json(BreakOut);

此外,我强烈建议您摆脱调用中的async: false参数$.ajax。通过设置此参数,您正在向服务器发出阻塞请求,这完全违背了 AJAX 调用的全部目的。

于 2013-09-16T09:19:07.087 回答