c# - "DataReader already open"有问题

标签 c# asp.net-mvc linq datareader

我在 SO 上进行了搜索,但没有找到我遇到的问题的任何答案。

我创建了一个 linq 来从两个表中获取所有数据,并使用一个 ajax 调用来获取新数据并在另一个下拉列表发生变化时填充我的下拉列表。

这是我目前所拥有的:

Controller

public ActionResult Index(int? page)
{
    vEntities db = new vEntities();

    var estados = (from e in db.estado
                   select e);

    var localidades = (from l in db.localidade
                       select l);

    ViewData["estados"] = new SelectList(estados, "cod", "descricao");
    ViewData["localidades"] = new SelectList(localidades, "id", "descricao");

    return View();
}

public ActionResult GetLocalidades(string codEstado)
{
    vEntities db = new vEntities();

    var info = (from l in db.localidade
                where l.cod_estado == codEstado
                select l);

    return Json(info);
}

查看

<%= Html.DropDownList("estados", ViewData["estados"] as SelectList, String.Empty)%>
<%= Html.DropDownList("localidade", ViewData["localidades"] as SelectList, String.Empty)%>

<script type="text/javascript">
    $(document).ready(function () {
        $("#estados").change(function () {
            var ddlLocalidade = $("#localidade")[0];
            ddlLocalidade.length = 0;
            var cod = $(this).val();

            $.post(
                "/Home/GetLocalidades",
                { codEstado: cod },
                function (data) {
                    var option;
                    $.each(data, function () {
                        option = new Option(this.descricao, this.id);
                        ddlLocalidade.options.add(option);
                    });
                }
                );

        });
    });
</script>

当我更改激活 JS 函数的第一个下拉列表时,我在“Getocalidades”方法返回 Json 后立即收到此错误:

There is already an open DataReader associated with this Connection which must be closed first

我想我在格式化代码时遇到了一些问题 :) 抱歉。

我看不出连接有任何问题,谁能告诉我哪里出了问题?

提前致谢

最佳答案

这只是一个猜测。但是如果你改变这些行会发生什么

var estados = (from e in db.estado select e);

var localidades = (from l in db.localidade select l);

var info = (from l in db.localidade where l.cod_estado == codEstado select l);

var estados = (from e in db.estado select e).ToList();

var localidades = (from l in db.localidade select l).ToList();

var info = (from l in db.localidade where l.cod_estado == codEstado select l).ToList();

关于c# - "DataReader already open"有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4755037/

相关文章:

c# - .NET 异步,单线程可以在任务之间划分时间片吗?

c# - 当 IIS 应用程序加载时,应用程序配置设置是否保存在内存中?

asp.net-mvc - Visual Studio : disable web development server for some web projects

c# - 查询 List<T> 或数据库更快吗?

c# - 使用 Thinktecture Identity Server 时保留 OAuth2 不记名 token

c# - linq select within where子句

asp.net html.listboxfor

asp.net-mvc - System.Web.HttpRequestBase 不包含 'CreateResponse' 的定义

c# - NHibernate 使用 Linq 查询字符串集合导致错误或空集合

c# - PLINQ 真的不保留顺序吗?