Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc和jQuery不起作用的级联dropdownlist_Asp.net_Linq_Asp.net Mvc 2_Drop Down Menu - Fatal编程技术网

Asp.net mvc和jQuery不起作用的级联dropdownlist

Asp.net mvc和jQuery不起作用的级联dropdownlist,asp.net,linq,asp.net-mvc-2,drop-down-menu,Asp.net,Linq,Asp.net Mvc 2,Drop Down Menu,我正在尝试使用一个级联dropdownlist的解决方案(一个dropdownlist中的选择决定了第二个dropdownlist中的选项),如下所示: 版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.1 更新: 我现在将其更新为以下内容: 获取与所选客户关联的任务的操作方法: <div> <label for="Customers"> Ku

我正在尝试使用一个级联dropdownlist的解决方案(一个dropdownlist中的选择决定了第二个dropdownlist中的选项),如下所示:


版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.1 更新:

我现在将其更新为以下内容:

获取与所选客户关联的任务的操作方法:

    <div>
        <label for="Customers">
            Kund:</label>
        <%:Html.DropDownListFor(m => m.Customers, new SelectList(Model.Customers,"Id", "Name"), new {@id="CustomerId"}) %>
        &nbsp;&nbsp;
        <label for="Tasks">
            Aktiviteter:</label>
        <%:Html.DropDownListFor(m => m.Tasks, new SelectList(Model.Tasks,"Id", "Name"), new {@id="TaskId"}) %>
    </div>
并且认为:

    $(document).ready(function () {
        //Hook onto the MakeID list's onchange event
        $("#CustomerId").change(function () {
            //build the request url
            var url = "Timesheet/Tasks";
            //fire off the request, passing it the id which is the MakeID's selected item value
            $.getJSON(url, { id: $("#CustomerId").val() }, function (data) {
                //Clear the Model list
                $("#TaskId").empty();
                //Foreach Model in the list, add a model option from the data returned
                $.each(data, function (index, optionData) {
                    $("#TaskId").append("<option value='" + optionData.Id + "'>" + optionData.Name + "</option>");
                });
            });
        }).change();
    });

    public JsonResult Tasks(string id)
    {
        var result = new JsonResult();
        var tasks =
            _model.Tasks.Where(task => task.CustomerId.ToString() == id).Select(
                task => new {ID = task.Id, Name = task.Name});
        result.Data = tasks;

        result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        return result;
    }
昆德: m、 客户,新的选择列表(Model.Customers,“Id”,“Name”),新的{@Id=“CustomerId”})%> Aktiviter: m、 任务,新建选择列表(Model.Tasks,“Id”,“Name”),新建{@Id=“TaskId”})%>
现在我在第二个下拉列表中以某种方式过滤和选择了结果,在选择不同客户时,选项的数量是正确的。但是,task dropdownlist中的值对于它们都是“未定义”的

更新2:

我发现了问题:

在jQuery中,我忘记了修复任务对象的属性名称。以下是工作版本:

var tasklist = _model.Tasks.Where(x => x.CustomerId.ToString() == id)
                           .Select(x => new { ID = task.ID, Description = task.Description });
$(文档).ready(函数(){
    public JsonResult Tasks(string id)
    {
        var result = new JsonResult();
        var tasks =
            _model.Tasks.Where(task => task.CustomerId.ToString() == id).Select(
                task => new {ID = task.Id, Name = task.Name});
        result.Data = tasks;

        result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        return result;
    }
//钩住MakeID列表的onchange事件 $(“#CustomerId”).change(函数(){ //构建请求url var url=“时间表/任务”; //触发请求,向其传递作为MakeID的选定项值的id $.getJSON(url,{id:$(“#CustomerId”).val()},函数(数据){ //清除模型列表 $(“#TaskId”).empty(); //对于列表中的每个模型,从返回的数据中添加一个模型选项 $.each(数据、函数(索引、选项数据){ $(“#TaskId”).append(“+optionData.Name+”); }); }); }).change(); });

但是我想知道如何获得DropDownList的默认值。否则,当您第一次访问页面时,customer dropdownlist将有一个值,但任务列表将不会…。

JsonResult使用JavascriptSerializer生成JSON数据,JavascriptSerializer不支持循环引用。 也许下面的帖子可以帮助你解决问题:

更新

与循环引用不同,只需返回另一个对象的列表,其中只包含您需要的两个字段:ID和Description。它看起来像这样:


您确定操作方法已完成吗?
\u model.Tasks
来自哪里?使用它的代码被注释掉了-因此该行不会编译,或者您是否已取消注释掉了它?请完整地发布动作方法。不,就像我提到的,我注释掉了linq表达式,因为它不起作用。foreach做的和linq应该做的一样_Tasks是包含数据库数据的模型。我没有包括获取数据的代码。但这种行动方法是有效的。只是linq表达式不起作用(因此被注释掉)。但我仍然想知道为什么linq表达式不起作用(当然是在未注释的情况下)。但主要是,我想知道为什么jQuery似乎没有用结果任务填充第二个下拉列表…嗯,好吧。。。但我不知道该怎么处理那篇文章,它有点让我不知所措。我正在为我的模型使用实体框架,我想我不应该在那里引入任何属性([ScriptIgnore]),因为如果我更新模型,它将消失。我有一个ViewModel来简化对模型的访问。但是它只是有一组属性访问客户、任务等集合。我不知道在哪里使用此属性…谢谢,是的,我认为最好跳过循环解决方法,我尝试了你的建议。它确实改变了一些似乎在正确轨道上的东西,但我现在在任务下拉列表中得到“未定义”作为值。见上面的更新。我做错了什么?我用你建议的代码让它工作了。你能告诉我如何在第一个下拉列表中获得默认值吗?我想出来了。只需在selectlist参数后添加它:m.Customers,new-selectlist(Model.Customers,“Id”,“Name”),“请选择…”,new{@Id=“CustomerId”})%>感谢您对CGK的所有帮助!
    public JsonResult Tasks(string id)
    {
        var result = new JsonResult();
        var tasks =
            _model.Tasks.Where(task => task.CustomerId.ToString() == id).Select(
                task => new {ID = task.Id, Name = task.Name});
        result.Data = tasks;

        result.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
        return result;
    }
var tasklist = _model.Tasks.Where(x => x.CustomerId.ToString() == id)
                           .Select(x => new { ID = task.ID, Description = task.Description });