【问题标题】:Javascript does not run on PartialViewJavascript 不在 PartialView 上运行
【发布时间】:2015-01-29 11:55:22
【问题描述】:

我正在使用 MVC4、C# 和 Razor 来制作一个简单的 Web 应用程序。

在我的控制器中,我有一个方法可以返回向用户显示的局部视图,在这种情况下,是一个模态弹出窗口:

public ActionResult GetPackageDetails(int id)
{ 
    return PartialView("_EditPackageModal", new ModalEditPackage());
} 

局部视图,它是一个模态弹出窗口,如预测的那样显示,但不运行任何 javascript:

@model SuperApp.Model.ModalEditPackage

<div class="modal fade bs-example-modal-lg" id="editPackageModal" tabindex="-1" role="dialog" aria-labelledby="editPackages" aria-hidden="true">
    <div class="modal-dialog modal-lg">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title" id="myModalLabel">Edit Package @Model.packageName</h4>
            </div>
            <div class="modal-body">

                <div>
                    <label class="control-label">Package Name: </label>
                    <input type="text" class="form-control" id="package-name" placeholder="@Model.packageName">
                </div>
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="button" class="btn btn-primary">Save changes</button>
            </div>
        </div>
    </div>
</div>

这是我希望在局部视图上运行的 javascript 代码:

<script>
    $("input").click(function () {
        alert("hello world!");
    });
</script>

看完这个问题:

我意识到我必须在局部视图中包含脚本。总结一下:

  1. 局部视图无法运行我项目中的 JS 代码。
  2. 局部视图只运行在局部视图中使用&lt;script&gt;标签直接指定的JS代码

现在,在这个例子中这很好,但在现实世界中,我有几个脚本可以处理局部视图,而且它们相当大。此外,客户端已经下载了它们,因为它们正在其他视图中使用,我不知道如何告诉部分视图脚本所在的位置,因为我使用的是 Bundles。

有没有办法在不将脚本直接打入局部视图的情况下解决这个问题?

【问题讨论】:

  • 您可以从包含部分视图的任何视图运行脚本,它会正常工作,请记住视图呈现服务器端,并且 js 在浏览器中执行,因此当视图到达浏览器时没有任何迹象表明它的任何部分来自局部视图。您链接到的问题是关于您不能在局部视图中包含部分的事实。
  • 但是他们的解决方案可以解决我的部分问题——至少现在部分视图能够运行 JS,但不是我想要的方式。我可以使用其他解决方案吗?
  • 所以你的局部视图实际上是由 ajax 请求加载的,对吗?
  • 你能解释一下链接的问题解决了什么问题,因为它是关于在部分视图中使用@section,你没有这样做。

标签: javascript c# asp.net-mvc asp.net-mvc-4 razor


【解决方案1】:

为所有模态框或 html 块赋予唯一的名称。 让你的 js 代码如下:

$(document).on('click', '#yourSpecifiedDomElement input','click',function(){
    alert("hello world!");
});

将您所有的 javascript 代码放置到捆绑包中包含的指定 js 文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-27
    • 2015-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多