当前位置:  开发笔记 > 编程语言 > 正文

MVC控制器调用了两次

如何解决《MVC控制器调用了两次》经验,为你挑选了2个好方法。

我有一个带有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 
    }
}

mxmissile.. 16

有时我发现Firebug会导致这种行为.如果已安装,请尝试禁用其" 脚本"面板.

说明:在某些情况下,Firebug无法在其"脚本"面板中获取显示的脚本源.在这些情况下,它会启动第二个请求来获取它们.有关此问题的一些讨论,请参阅问题7401,这可以缓解此问题并使用Firebug 2.0.2进行修复.



1> mxmissile..:

有时我发现Firebug会导致这种行为.如果已安装,请尝试禁用其" 脚本"面板.

说明:在某些情况下,Firebug无法在其"脚本"面板中获取显示的脚本源.在这些情况下,它会启动第二个请求来获取它们.有关此问题的一些讨论,请参阅问题7401,这可以缓解此问题并使用Firebug 2.0.2进行修复.


刚刚注意到Chrome 18.0.1025.168也是这样做的......无论是否打开开发人员工具

2> Leniel Macca..:

这是一个基本清单(从这里复制):

    检查视图中是否有任何图像或其他元素具有空src属性(例如)或具有src 引用不再存在的属性的属性.您最好直接在浏览器的"页面源"中查看,而不是在View中查看,因为在呈现视图时可能会出现一些"动态"问题.一旦在页面HTML源中找到这样的空元素,通常很容易在View中找到相同的元素并修复问题.这也可能发生.

    检查您是否有任何AJAX引用为空的调用URL(浏览器会将此类空白解释URL为当前页面,并将再次请求当前页面使该Controller操作执行几次).

    您忘记“false”JavaScript点击事件处理程序返回进行AJAX呼叫的链接或按钮.如果您忘了“return false”,浏览器只需解释链接的默认操作 - 常规,非AJAX,再次调用同一页面)

    有时Firebug和YSlow [Firefox(FF)插件]会导致此类问题.只需在FF中暂时禁用它们或使用其他浏览器进行测试.

    注意装饰控制器或操作的重复过滤器.(这是我的问题)

推荐阅读
mobiledu2402851373
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有