MVC控制器被调用两次

rbo*_*man 33 asp.net-mvc asp.net-mvc-2

我有一个控制器,从ActionLink调用中被调用两次.

我的主页有一个链接,点击时调用Play控制器上的Index方法.id为100传递给方法.我认为这是造成这个问题的原因.更多关于此的信息.

以下是一些代码段:

主页:

<%= Html.ActionLink("Click Me", "Index", "Play", new { id = 100 }, null) %>
Run Code Online (Sandbox Code Playgroud)

播放控制器:

public ActionResult Index(int? id)
{
    var settings = new Dictionary<string, string>();
    settings.Add("Id", id.ToString());
    ViewData["InitParams"] = settings.ToInitParams();
    return View();
}
Run Code Online (Sandbox Code Playgroud)

播放视图:

<%@ Page Title="" Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

(html <head> omitted for brevity)

<body>
    <form id="form1" runat="server" style="height:100%">
        Hello
    </form>
</body>
Run Code Online (Sandbox Code Playgroud)

如果我摆脱了Index方法的参数,一切都很好.如果我保留参数,则调用Index方法,并将100作为id.返回View后,第二次调用该方法,参数为null.

我似乎无法弄清楚是什么触发了第二次通话.

我的第一个想法是添加这样的特定路线:

routes.MapRoute(
    "Play", // Route name
    "Play/{id}", // URL with parameters
    new {controller = "Play", action = "Index"} // Parameter defaults
);
Run Code Online (Sandbox Code Playgroud)

除了制作更漂亮的链接之外,这没有任何效果.

我不知道从哪里开始.

先感谢您.

干草堆

Fra*_*man 63

是否有其他标记可能会意外引用该页面?脚本引用,图像引用,css引用都可能被错误地指向'.' 或当前页面.

  • 我遇到过同样的问题.在我的例子中,它是一个带有src =""的<img>标签,因此我可以稍后动态加载图像.花了相当多的努力追踪那个.修复是完全删除src属性. (36认同)
  • 某些浏览器会查找/favicon.ico文件,这可能会导致路由再次运行. (13认同)
  • 原来,javascript"找不到文件"错误导致页面加载两次.谢谢! (2认同)

Cla*_*ire 5

在Java Spring Maven项目中追踪该bug的10个小时.

首先在SELECT上我认为Hibernate只是记录了两次,但随后INSERT我认为请求被调用了两次.单步执行代码我发现控制器被调用了两次......

尝试了所有可能的Spring配置,认为上下文被加载了两次或者bean被实例化了两次......

在绝望中,逐个重建项目,最后添加一个HTML和kaboom bug的片段.

<img alt="" src="#" />
Run Code Online (Sandbox Code Playgroud)

尖锐的标志是有罪的,重新加载URL.我知道这个话题已经过时了,但是我用我在互联网上找不到的词来总结我的搜索,以找到同一问题的答案!可以帮助别人......