级联掉落溺水-第2次掉落伴随“未知”但物品数量正确

时间:2019-07-02 00:18:06

标签: c# jquery asp.net-mvc razor

为了进行级联下拉菜单,我遵循了this很好的教程。但是我在整个过程中做了一些更改。 总结一下,我有两个下拉菜单,其中一个应该控制另一个。第一个运行良好,它返回了我期望的数据。 第二个,它返回我期望的正确数量,但是所有不同的项目都以“未知”形式出现。

例如,我在第一个下拉菜单中选择了一个名称,第二个下拉菜单更改为与第一个下拉菜单相关的正确项目数量,但信息/项目不明。

在我的.cshtml上,

    <div class="editor-label">
        @Html.LabelFor(model => model.VId, "vendor")
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.VId, ViewBag.VendorName as SelectList, "--Select Vendor--", new { @class = "form-control" })
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.IFID, "family")
    </div>
    <div class="editor-field">
        @Html.DropDownListFor(model => model.IFID, ViewBag.FamilyName as SelectList, "--Select Family--", new { @class = "form-control" })

    </div>

此外,在我的.cshtml上,我还有创建jquery脚本的部分:

@section scripts {

    <script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.10.2.js" type="text/javascript"></script>
    <script src="https://ajax.microsoft.com/ajax/jquery/jquery-1.10.2.min.js" type="text/javascript"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script>
    <script src="https://ajax.aspnetcdn.com/ajax/jquery.validate/1.12.0/jquery.validate.min.js" type="text/javascript"></script>
    <script>
         $(document).ready(function ()
            {
            //Dropdownlist Selectedchange event
            $("#VId").change(function ()
            {
                $("#IFID").empty();
                $.ajax({
                    type:'POST',
                    url: '@Url.Action("SelectFamilies")',
                    dataType: 'json',
                    data: { id: $("#VId").val() },
                    success: function (families)
                    {
                        alert($("#VId").val());
                        alert(families.dataType);

                        $.each(families, function (i, family)
                        {
                            $("#IFID").append('<option value="'
                                + family.IFID + '">'
                                + family.IndexFamilyName + '</option>');
                        });
                    },
                    error: function (ex)
                    {
                        alert('Failed to retrieve states.' + ex.responseText);
                    }
                });
                return false;
            })
        });

    </script>
}

在此.cshtml上,我指向一个@model,它以这种方式定义变量:

public virtual ICollection<IFDto> families { get; set; }
public virtual ICollection<VDto> vendors { get; set; }

public virtual VDto vendor { get; set; }
public virtual IFDto family { get; set; }

“ @ Url.Action(“ SelectFamilies”)”来自(在控制器中):

public JsonResult SelectFamilies(int id)
    {
        //IEnumerable<IFDto> families = db.states.Where(stat => stat.country_id == id);
        IEnumerable<IFDto> families = _indexfamilyDataGateway.GetFamiliesByVendor(id);
        return Json(families);
    }

此外,在同一控制器上,我有:

    public ActionResult Create()
    {
        //ViewBag.VendorName = GetVendorSelectItems();
        //ViewBag.FamilyName = GetFamilySelectItems();

        ViewBag.VendorName = new SelectList(_vendorDataGateway.GetAll(), "VId", "AbbrevAndName");
        ViewBag.FamilyName = new SelectList(_indexfamilyDataGateway.GetAll(), "IFID", "IFName");


   return View();
    }

这是herehere中提到的类似问题。

在其中一项评论中,要求我(也是一个好主意)在.ajax成功文件内执行“ console.log(families)”。它返回我需要的信息: enter image description here 请注意,由于我放入了“控制台”,它正在打印4次。 .ajax成功之前和之后的“每个”语句。如果我只是在成功之后放在$ .each之前,它将返回一个数组。

1 个答案:

答案 0 :(得分:0)

由@Ammar提供的一个好主意是使用“ console.log(families)”,我能够弄清楚在.ajax $ .each里面我是错误地使用了:

+ family.IFID + '">'
+ family.IndexFamilyName + 

何时应该使用:

+ family.iFID + '">'
+ family.indexFamilyName + 

问题是在“。”之后错误地使用了大写字母。