【问题标题】:Introduced infinite loop, using jquery and MVC, can't find what is causing it引入无限循环,使用jquery和MVC,找不到是什么原因造成的
【发布时间】:2011-08-25 06:11:18
【问题描述】:

我似乎以某种方式引入了无限循环。 我正在使用 MVC2 并尝试使用 jQuery postajax - 但似乎两者都发生了。

这个想法是用户在文本字段中输入 id,然后我在 db 中搜索 id,然后在网格中显示对象。

代码如下:

<script type="text/javascript">

    function bulk() {
        var data = $("#textfield").val();
        $.post("Search", { searchString: data });
    }
    </script>

哪些帖子到控制器方法:

[HttpPost]
public ActionResult Search(string searchString)
{
...
return View(viewModel);
}

问题是,(无论是使用ajax 还是post)在文本框中输入ID 并点击搜索按钮后,我得到了stackoverflow。这似乎可能是由无限循环引起的,但我无法弄清楚它为什么会发生。在这一行之后会发生什么: $.post("Search", { searchString: data });

我点击了操作方法:public ActionResult Search(string searchString)然后一切正常,搜索数据库,添加到视图模型,然后在return View(viewModel);之后我只是一遍又一遍地直接回到public ActionResult Search(string searchString)

我完全不知道为什么会发生这种情况。任何想法可能会发生什么?

编辑bulk通过按钮点击调用&lt;input type="submit" onclick="bulk()" value="Search" /&gt;

@Daniel,我知道StackOverflowException 未处理

在 mscorlib.dll 中出现 'System.StackOverflowException' 类型的未处理异常 如果我单击查看详细信息 - 无法评估表达式,因为当前线程处于堆栈溢出状态。

发生在实体框架代码中

public Entities() : base("name=Entities", "Entities")
{
this.ContextOptions.LazyLoadingEnabled = true;
OnContextCreated();
}

【问题讨论】:

  • 似乎在无限循环中调用了 bulk() 函数。 bulk() 函数在哪里/如何调用?
  • 如果您使用 Fiddler,您是否会在单击后看到大量请求(即使如此,也不应该导致堆栈溢出!)?如果您对 Search 方法进行单元测试(或以其他方式调用),是否仍然会出现堆栈溢出?

标签: c# jquery asp.net-mvc json http-post


【解决方案1】:

在你看来,你有没有机会打电话给@Html.Action() helper? (相对于@Html.ActionLink()

您还应该能够只按 F5 来调试应用程序,让它崩溃,然后检查调用堆栈以找到导致无限外观的违规代码。

【讨论】:

  • 没有Html.Action()Html.ActionLink(),我只是手动设置了像“搜索”这样的url(去localhost:4034/Contoller/Search)
  • 我看到您在 EF 上使用延迟加载。根据您的看法,这可能是另一个潜在原因。只是为了测试一下,如果你返回一个 IQueryable,你可以尝试添加一个 .ToList() 来让你的控制器检索数据,而不是你的视图。
猜你喜欢
  • 2015-07-29
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-07
  • 1970-01-01
相关资源
最近更新 更多