[英]MVC Controller Called twice
我有一个带有Index动作的Product控制器,它基本上为ProductController创建post和Index(Post动作动词)动作的视图表单,它基本上将产品保存到db但是当发生验证错误时,我返回一个View(mymodel)else保存时,我返回RedirectToAction(“Created,”Product“),但由于一些奇怪的原因,当我进入代码时,它会两次而不是一次触及Product Controller动作。因此产品有2条记录而不是一条记录。
public ActionResult Index()
{
return View()
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(FormCollection fc)
{
// 2 calls are made to this controller
try
{
// save the product
return RedirectToAction("Created");
}
catch(Exception ex)
{
// recreate the model from form collection
return View(viewData); // when a validation error occurs it comes into the catch block
}
}
这是一个基本清单(从这里复制):
检查视图中是否有任何图像或其他元素,其中包含空的src
属性(例如<img src=”" />
),或者使用src
属性引用不再存在的内容。最好直接在浏览器中查看“页面源代码”,而不是视图本身,因为在呈现视图时可能会出现一些“动态”问题。一旦在页面的HTML
源代码中找到这样的空元素,通常很容易在视图中找到相同的元素并修复这个问题。 <link href="">
也可能发生这种情况。
检查您没有引用空URL
任何AJAX
调用(浏览器会将此空白URL
解释为当前页面,并将再次请求当前页面使Controller
操作执行几次)。
您忘记从JavaScript
单击事件处理程序返回“false”
,以获取进行AJAX
调用的链接或按钮。 如果您忘记“return false”
,浏览器只会解释链接的默认操作 - 常规,非AJAX
,再次调用同一页面)
有时Firebug和YSlow [Firefox(FF)插件]会导致此类问题。 只需在FF中暂时禁用它们或使用其他浏览器进行测试。
注意装饰控制器或操作的重复过滤器。 (这是我的问题)
这种情况的另一种解决方案
我有完全相同的问题,从Chrome运行和测试。 我无法调试它,因为第二个呼叫来自(外部呼叫)。 我已经在Firefox和Internet Explorer中随机测试了它没有双击。
无论是什么令人讨厌的事情,我都删除了Chrome缓存 (一切!!!)并且问题已经解决。
希望它会帮助你们中的一些人:)
我有一个类似的问题,控制器动作生成一个图像,我只是用Firefox看到它。 有一个非常老的错误导致这个,我猜仍然存在。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.