C#层叠下拉列表未定义

C#层叠下拉列表未定义,c#,jquery,asp.net-mvc,C#,Jquery,Asp.net Mvc,我试图创建一个级联下拉列表的基础上,什么是在第一个下拉列表中选择,但第二个列表不断得到未定义 以下是我视图中的下拉列表: <td align="left"> @Html.DropDownList("goals", ViewData["goals"] as SelectList, new { @class = "dropdownSource" }) @Html.HiddenFor(model => model.budge

我试图创建一个级联下拉列表的基础上,什么是在第一个下拉列表中选择,但第二个列表不断得到未定义

以下是我视图中的下拉列表:

      <td align="left">
            @Html.DropDownList("goals", ViewData["goals"] as SelectList, new { @class = "dropdownSource" })
            @Html.HiddenFor(model => model.budgetList[i].align_to_district_goal)
       <td align="left">
            @Html.DropDownList("priorities", new SelectList(string.Empty,"Value", "Text") , new { @class = "clsColumnNames" })
            @Html.HiddenFor(model => model.budgetList[i].align_to_district_priority)
       </td>

@Html.DropDownList(“goals”,ViewData[“goals”]作为SelectList,new{@class=“dropdownSource”})
@Html.HiddenFor(model=>model.budgetList[i]。与地区目标对齐)
@DropDownList(“优先级”,新的选择列表(string.Empty,“Value”,“Text”),新的{@class=“clsColumnNames”})
@Html.HiddenFor(model=>model.budgetList[i].align_to_district_priority)
这是我的剧本:

<script>
    $("select.dropdownSource").live("change", (function () {
        $("#priorities").empty();

        var columnSelectBox = $(this).parent("td").next("td").find("select.clsColumnNames");

        $.ajax({
            type: 'POST',
            url: '/PrepareBudget/GetPriorities',
            dataType: 'json',
            data: { goals: $(this).find("option:selected").text() },
            success: function (str) {

                $.each(str, function (Value, Text) {
                    $("#priorities").append('<option value ="' + Text.Value + '">' + Text.Text + '</option>');
                    debugger;
                });
            },
            error: function (ex) {
                alert('Failed to retrieve columns.' + ex);
            }
        });
        return false;
    }));
</script>

$(“select.dropdownSource”).live(“更改”),(函数(){
$(“#优先级”).empty();
var columnSelectBox=$(this.parent(“td”).next(“td”).find(“select.clsColumnNames”);
$.ajax({
键入:“POST”,
url:“/PrepareBudget/GetPriorities”,
数据类型:“json”,
数据:{goals:$(this).find(“option:selected”).text()},
成功:功能(str){
$.each(str、函数(值、文本){
$(“#优先级”).append(“”+Text.Text+“”);
调试器;
});
},
错误:函数(ex){
警报(“检索列失败”。+ex);
}
});
返回false;
}));
这是我的控制器:

public JsonResult GetPriorities(string goals)
{
    List<string> priorities = new List<string>();

    switch (goals)
    {
        case "Goal 1: Strengthen Early Literacy":
            priorities.Add("Priority 1: Increase access to high-quality PreK classrooms and monitor quality");
            priorities.Add("Priority 2: Attract and retain strong teachers in early grades");
            priorities.Add("Priority 3: Execute a comprehensive District-wide literacy plan");
            priorities.Add("Priority 4: Leverage family and community partners to increase early literacy efforts");
            break;
        case "Goal 2: Improve Post-Secondary Readiness":
            priorities.Add("Priority 1: Improve student engagement through access to rigorous prep courses and personalized learning opportunities");
            break;
        case "Goal 3: Develop Teachers, Leaders, and Central Office to Drive Student Success":
            priorities.Add("Priority 1: Develop leadership pathways for teachers, coaches and school administrators");
            priorities.Add("Priority 2: Create competitive compensation systems to attract and retain classroom and school leaders");
            priorities.Add("Priority 3: Ensure high-quality feedback and evaluation of all staff connected to career development opportunities");
            priorities.Add("Priority 4: Use data deep dives in schools and District offices to drive continuous improvement");
            break;
        case "Goal 4: Expand High-Quality School Options":
            priorities.Add("Priority 1: Implement a common School Performance Framework to communicate school quality");
            priorities.Add("Priority 2: Transition to a student-based funding model");
            priorities.Add("Priority 3: Establish new school models that focus on different career training and specialized learning");
            priorities.Add("Priority 4: Commit to a compact with our charter schools");
            break;
        case "Goal 5: Mobilize Family and Community Partners":
            priorities.Add("Priority 1: Improve how we deliver information to parents through multiple communication avenues");
            priorities.Add("Priority 2: Provide ongoing diversity and customer service training to all staff and hold them accountable for service quality");
            priorities.Add("Priority 3: Establish a volunteer hub to connect partners to the District's student mission");
            break;
    }
    return Json(priorities);
}
publicJSONResult获取优先级(字符串目标)
{
列表优先级=新列表();
转换(目标)
{
案例“目标1:加强早期扫盲”:
优先事项。增加(“优先事项1:增加进入高质量PreK教室的机会并监测质量”);
优先事项。添加(“优先事项2:吸引和留住优秀的早期教师”);
优先事项。添加(“优先事项3:执行全面的全区扫盲计划”);
优先事项。增加(“优先事项4:利用家庭和社区伙伴增加早期扫盲工作”);
打破
案例“目标2:提高中学后准备状态”:
优先事项。添加(“优先事项1:通过严格的预科课程和个性化学习机会提高学生参与度”);
打破
案例“目标3:培养教师、领导和中央办公室,推动学生成功”:
优先事项。增加(“优先事项1:为教师、教练和学校管理人员制定领导途径”);
优先事项。添加(“优先事项2:创建有竞争力的薪酬体系,以吸引和留住教室和学校领导”);
优先事项。增加(“优先事项3:确保所有与职业发展机会有关的工作人员得到高质量的反馈和评价”);
优先事项。添加(“优先事项4:利用学校和地区办事处的数据深度挖掘推动持续改进”);
打破
案例“目标4:扩大优质学校选项”:
优先事项。添加(“优先事项1:实施共同的学校绩效框架,以传达学校质量”);
优先事项。添加(“优先事项2:向以学生为基础的资助模式过渡”);
优先事项。增加(“优先事项3:建立注重不同职业培训和专业学习的新学校模式”);
优先事项。添加(“优先事项4:承诺与我们的特许学校签订契约”);
打破
案例“目标5:动员家庭和社区伙伴”:
优先事项。添加(“优先事项1:改进我们通过多种沟通渠道向家长传递信息的方式”);
优先事项。增加(“优先事项2:向所有员工提供持续的多样性和客户服务培训,并让他们对服务质量负责”);
优先事项。添加(“优先事项3:建立志愿者中心,将合作伙伴与学区的学生任务联系起来”);
打破
}
返回Json(优先级);
}
为什么在优先级下拉列表中未定义每个优先级?

/。。。
//...
success: function (str) {
                $.each(str, function (index, text) {
                    $("#priorities").append('<option value ="' + index + '">' + text + '</option>');
                });
            },
///...
成功:功能(str){ $.each(str,函数(索引,文本){ $(“#优先级”)。追加(“”+文本+“”); }); }, ///...
您的操作方法正在返回字符串列表。列表中的每个项目(单个字符串对象)都没有
文本
属性。但是您的客户端代码正在尝试访问这些

您可以更改服务器方法以返回具有文本和值属性的SelectListItem列表

public JsonResult GetPriorities(string goals)
{
    List<SelectListItem> priorities = new List<SelectListItem>();
    // to do : Replace the below hard coded items with the real items you want
    priorities.Add(new SelectListItem { Value="Priority 1",
    Text="Priority1: Increase access to high-quality PreK classrooms and monitor quality"});

    return Json(priorities);
}
我还注意到了代码中的另一个问题。从jquery1.7开始,jQuery
live
方法是。你应该考虑在上使用<代码>而不是Live。

$(function(){

  $("select.dropdownSource").on("change", (function () {

  });

});

发布问题时,请学会使用正确的标签。请不要编辑问题,使现有答案无效。相反,创建一个新问题。谢谢!这对于我的for循环中的第一个dropdownlist非常有用。我如何让它在for循环中的每一行工作?你在说哪个for循环?我在你的问题中没有看到任何for循环。上面的代码也是第二个下拉列表!很抱歉试图找出如何更新我的原始问题,以包括循环非常感谢您的额外建议…非常感谢。我终于在原始问题的视图中发布了我的For循环。您的原始问题是关于未定义错误的,其中发布了两个答案。用新问题更新问题不是一个好主意(我实际上不明白你的新问题是什么!)你在写问题时需要非常清楚。请花点时间阅读谢谢!为什么它只适用于for循环中的第一行?
$(function(){

  $("select.dropdownSource").on("change", (function () {

  });

});