【问题标题】:ASP.NET MVC controller's action is executed again when jQuery's toggleClass() function is executed执行 jQuery toggleClass() 函数时再次执行 ASP.NET MVC 控制器操作
【发布时间】:2016-10-27 08:38:02
【问题描述】:

EDIT 27.10.2016, 12:00:我可以找出以下奇怪行为的原因: 这仅仅是因为在 CSS 中,用于菜单的某些列表项的背景图像的路径是错误的。这导致控制器的动作再次触发。 (!!!)

我有一个具有以下操作的控制器:

public IActionResult Index()
{
    //get records from the database and pass them to the View
}

然后在我看来,我显示以下导航(css 类基于引导程序):

<nav class="navigation_primary">
<ul class="nav nav-justified hidden-xs">
    <li>
        <a href="https://www.google.com">Google</a>
    </li>

    <li class="dropdown">
        <a href="https://www.stackoverflow.com" class="dropdown-toggle">StackOverflow</a>
        <ul class="dropdown-menu">
            <li><a href="#">ASP.NET</a></li>
            <li><a href="#">C#</a></li>
            <li><a href="#">jQuery</a></li>
        </ul>
    </li>
</ul>
</nav>

然后,在 jQuery 中,我有以下代码负责在鼠标悬停父级时显示子条目(例如,当 StackOverflow 悬停时显示 ASP.NET、C#、jQuery)。

//to open the primary navigation on mouseover
$(".dropdown").hover(

// open the dropdown by hover
function ()
{
    $(this).toggleClass("open");
},

// close if the cursor goes outside the hover
function ()
{
    $(this).toggleClass("open");
}
);

奇怪的是,在我将鼠标悬停在具有任何子项的菜单项(在本例中为具有“下拉”类的“StackOverflow”)之后,我在上面发布的整个 Index() 操作将再次执行。

有人看到这种奇怪行为的原因吗?在这种情况下,我不明白为什么会发生 jQuery 和 ASP.NET MVC 之间的这种干扰。

EDIT 27.10.2016, 11:00: 我发现冲突必须依赖于其他东西: 当我注释掉上面提到的 jQuery 代码并用下面的 CSS 替换它以达到相同的行为时,控制器的动作也会被触发。

ul.nav li.dropdown:hover ul.dropdown-menu{ display: block; }

【问题讨论】:

  • 这是您应用程序中的全部代码吗?您发布的任何内容都不会导致回帖。还有其他事件处理程序吗?你在用bootstrap js吗?
  • 你有两次function () { $(this).toggleClass("open"); }。这会导致问题吗?
  • @RobLang 当然这不是整个代码,而只是我认为与解释此问题相关的部分。还有许多其他事件处理程序,我也在使用 bootstrap.js。但是当我在 jQuery 中做一些不同的事情而不是切换 css 类时(例如使用 css() 函数来指定一些 css 属性),控制器的操作不再被触发
  • @ElectricRouge 不,这不会导致问题。我根据api.jquery.com/hover指定了这段代码两次,第一次是鼠标指针进入元素时执行的函数。第二个是当鼠标指针离开元素时执行的函数。
  • @RobLang 在我上面的编辑中查看更多信息

标签: c# jquery asp.net asp.net-mvc twitter-bootstrap-3


【解决方案1】:

我可以找出以下奇怪行为的原因:这仅仅是因为在 CSS 中,用于菜单的某些列表项的背景图像的路径是错误的。这导致控制器的动作再次触发。 (!!!)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多