【问题标题】:cascading dropdownlist with partial view issue具有部分视图问题的级联下拉列表
【发布时间】:2013-10-27 20:14:23
【问题描述】:

我在级联下拉列表中遇到问题,其中第二个 ddl 应该出现在部分视图中,我无法自己处理。请帮我弄清楚为什么我有以下包?

所以,我有一个用户可以选择品牌的第一个 ddl 视图:

@Html.DropDownList("brands", new SelectList(
@ViewBag.Brands, "Id", "BrandName"),
"--select a Brand--",
new
{
id = "ddlBrands",
data_url = Url.Action("ChooseModel", "Home")
})
<div id="divModel"></div>

ChooseModel 方法返回以下部分视图:

<div id="chooseModel">
<div class="lead">Model</div>
@Html.DropDownList("models", new SelectList(Enumerable.Empty<SelectListItem> 
(), "Id", "ModelName"),
"--select a Model--",
new { id = "ddlModels" })
</div>

当用户在 ddlBrands 中选择一个项目时,应该会出现另一个模型下拉列表。因此,脚本如下所示:

  $(function () {
    $("#ddlBrands").change(function () {

        var url = $(this).data('url');
        var value = $(this).val();
        $('#divModel').load(url, { id: value });

        var brandId = $(this).val();
        $('#divModel').html("");
        $.getJSON("../Home/LoadModels", { brandId: brandId },
            function (modelData) {
                var select = $("#ddlModels");
                select.empty();
                select.append($('<option/>', {
                    value: 0,
                    text: "-- select a Model --"
                }));
                $.each(modelData, function (index, itemData) {
                    select.append($('<option/>', {
                        value: itemData.Value,
                        text: itemData.Text
                    }));
                });
            });
    });
});

最后,LooksModels 方法加载特定品牌的模型:

public JsonResult LoadModels(string brandId)
{
   if (string.IsNullOrEmpty(brandId))
         return Json(HttpNotFound());

        var modelList = unitOfWork.ModelRepository
                        .GetModelListByBrand(Convert.ToInt32(brandId)).ToList();
        var modelData = modelList.Select(m => new SelectListItem()
            {
                Text = m.ModelName,
                Value = m.Id.ToString()
            });

        return Json(modelData, JsonRequestBehavior.AllowGet);
    }

所以,当我启动应用程序并在第一个 ddl 中选择品牌时,子模型在第二个中显示良好。然后我选择了另一个品牌,再次出现了合适的型号。但是当我选择我第一次选择的品牌时,我无法选择任何型号 - ddlModels 只显示我--选择一个型号--。

你能告诉我脚本中有什么错误(我想)吗?

【问题讨论】:

    标签: asp.net-mvc cascadingdropdown


    【解决方案1】:

    在控制器上使用它:

    public JsonResult LoadModels(string fstValue)
            {
                YourClassname obj= new YourClassname ();
                int Id = 0;
                if (fstValue != "")
                    Id = Convert.ToInt32(fstValue);
                var result = obj.GetModelListByBrand(Convert.ToInt32(Id ));
    
                IList<SelectListItem> Data = new List<SelectListItem>();
                for (int i = 0; i < result.Count; i++)
                {
                    Data.Add(new SelectListItem()
                    {
                        Text = result[i].Text,
                        Value = result[i].Value,
                    });
                }
                return Json(Data, JsonRequestBehavior.AllowGet);
            }
    

    【讨论】:

    • Praveen,现在可以使用了!非常感谢!!!所以,对我来说,下一步是添加第三个下拉列表,))
    【解决方案2】:

    试试这个脚本:

    <script type="text/javascript">
              $(document).ready(function () {
                 $("#ddlBrands").change(function () {
                  firstDDLValue = $("#ddlBrands").val();
                   $.post('@Url.Action("LoadModels", "Home")', { fstValue: firstDDLValue },               function (result) {
                           var select = $("#ddlModels");
                           select.empty();
                           select.append($('<option/>', { value: '', text: '--Select--' }));
                           $.each(result, function (index, Data) {
                           select.append($('<option/>', {
                           value: Data.Value,
                           text: Data.Text
                           }));
                        });
                   });
                        });
                      });
        </script>
    

    【讨论】:

    • 不起作用 - 得到错误:无法为没有任何值或其值为 null 的引用获取属性“值”
    • 试试我的另一个答案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多