javascript - 在 JavaScript 或 jQuery 中获取部分 View 中的 HTML 类名称

标签 javascript jquery asp.net-mvc razor

我的 .cshtml 部分 View 中有以下标记,并将其放置在 Views/Shared 文件夹中:

_Modal.cshtml

<div class="loadingOverlay">
    <button class="btn loading-button" disabled><i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i></button>
</div>

还有外部 JavaScript(与部分 View .cshtml 不同的文件):

Modal.js

var Modal;

Modal = Modal || (function () {
    var loadingDiv = $('.loadingOverlay');
    return {
        Loading: function () {
            loadingDiv.css('display', 'block');
            $('body').prepend(loadingDiv);
        },
        LoadingDismiss: function () {
            loadingDiv.fadeOut('500');
        },
    };
})();

我从我的页面调用如下:

Index.cshtml

<!DOCTYPE html>
<html>
<head>
@Styles.Render("~/Content/font-awesome", "~/Content/css")
</head>
<body>
<div class="container-fluid">
        <div class="container">
            <div class="row">
                <button id="showOverlay" class="btn btn-default"></button>
            </div>
        </div>
    </div>
@Scripts.Render("~/bundles/jquery")

<script type="text/javascript">
        $(document).ready(function () {
            $('#showOverlay').click(function () {
                Modal.Loading();
            });
        })
    </script>
</body>
</html>

我的问题是:每当我单击按钮时,什么也没有发生。但是当我将 html 元素不在 _Modal.cshtml 中时它会起作用(请参阅下面的代码)。

我的问题是:如何使用 JavaScript 或 JQuery 获取 _Modal.cshtml 中的类名?

我可以在 Modal.js 中执行此操作(请注意,它与我将其放入 _Modal.cshtml 中相同),但这很难维护,而且我想要将所有内容放在部分 View 中,并在需要时通过类名调用它,而不是编写将转换为 JavaScript 对象的字符串:

var loadingDiv = $('<div class="loadingOverlay"><button class="btn loading-button" disabled>'
        + '<i class="fa fa-spinner fa-pulse fa-2x fa-fw"></i></button></div>');

非常感谢您的回答。

编辑:

2016 年 5 月 31 日的问题:

  • @Html.Partial("_Modal")@Html.Partial("~/Views/Shared/_Modal.cshtml") 之间有什么区别。仅仅是为了更好地理解编译器从哪里获取部分 View 吗?

@Guruprasad Rao 于 2016 年 6 月 1 日回答:

  • 除了提到 partialview 名称之外,两者没有任何区别。我建议的是提供完全限定的路径,帮助编译器从何处获取 partialview。您使用的其中之一将搜索“View”文件夹下的所有目录。所以我说的这个在性能方面会很好。

感谢@Guruprasad Rao 的回答和解释。

干杯~

最佳答案

您应该先将 partialview 从服务器导入到客户端浏览器,然后您可以使用 jquery 操作它。否则,您尝试查找的选择器将不存在元素。用户,@Html.Partial@Html.RenderPartial 导入它,在初始状态下隐藏它并在单击时显示它。举个下面的例子:

<body>
  <div class="container-fluid">
    <div class="container">
      <div class="row">
        <button id="showOverlay" class="btn btn-default"></button>
      </div>
    </div>
  </div>
  @Html.Partial("~/Views/Shared/_Modal.cshtml")
  <!--I assume that the content inside this will be initially in hidden state-->

  @Scripts.Render("~/bundles/jquery")

  <script type="text/javascript">
    $(document).ready(function() {
      $('#showOverlay').click(function() {
        Modal.Loading();
      });
    })
  </script>
</body>

Modal.js 更改

var Modal;

Modal = Modal || (function () {
    var loadingDiv = $('.loadingOverlay');
    return {
        Loading: function () {
            loadingDiv.css('display', 'block');
            //$('body').prepend(loadingDiv);
            //No need to prepend here since we are importing it through partial method
        },
        LoadingDismiss: function () {
            loadingDiv.fadeOut('500');
        },
    };
})();

关于javascript - 在 JavaScript 或 jQuery 中获取部分 View 中的 HTML 类名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37536322/

相关文章:

javascript - ReactJs 需要一个破坏布局的包装器 div

jquery - 在 Chrome 和 Safari 中的水平 jCarousel 中清空附加 <li>

asp.net-mvc - 以编程方式将路线映射到 Controller

asp.net-mvc - 脚手架错误: deps. json不存在

带有函数和随机数发生器的 JavaScript if/else 语句

java - 使用 http 请求通信 Java-Javascript

JavaScript 变量赋值/返回

javascript - 加速 Ajax 成功 DOM 操作

jquery - 我可以使用 jQuery 更改页面上链接的内容吗?

asp.net-mvc - MVC 整个模型的即时自动脚手架(如动态数据)?