MVC Partial View清除脚本Jquery Ajax

Moj*_*ojo 8 javascript asp.net asp.net-mvc jquery

项目:Asp.NET Core 2.1

在仪表板项目上工作,侧面导航分为子侧面等.在右侧有一个"主视图",其中部分应该被加载,所以当选择部分时,它应该在右侧呈现侧.

我已经完成了所有这些,但是当我有两个不同的视图,其中一些javascript是相同的,就像一个变量,然后我得到一个错误重新声明,这是因为加载的最后一个脚本仍然被缓存.谁知道如何解决这个问题?

部分的变量也在文件中声明而不是单独的,也试图分开,但这不起作用.

考虑不加载这个Ajax,但我喜欢它的流畅性.

视图1:

<div>
  <h1>Hello View1</h1>
  <script>
  const myVar1 = 'Hello';
  </script>
<div>
Run Code Online (Sandbox Code Playgroud)

视图2:

<div>
  <h6>Hello View2</h6>
  <script>
  const myVar1 = 'Hello';
  </script>
</div>
Run Code Online (Sandbox Code Playgroud)

错误:重新声明myVar1.

提前致谢!

943*_*43A 1

您需要的是一个命名空间。JavaScript 不使用命名空间关键字。取而代之的是闭包。您无法控制变量名称,尤其是当它不是您的代码时。尝试这个:

例子

视图1:

<div>
    <h1>Hello View1</h1>
    <script>
        var cl1 = (function(e){
            const myVar1 = 'closure 1'; // No public access.
            return {
                myVar1:myVar1, // Assign public access to cl1.myVar1.
                vname:function(){return myVar1; } // or assign it as a getter.
            };
        })();
    </script>
<div>
Run Code Online (Sandbox Code Playgroud)

视图2:

<div>
    <h6>Hello View2</h6>
    <script>
        var cl2 = (function(){
            const myVar1 = 'closure 2';
            return {
                myVar1:myVar1,
                vname:function(){return myVar1; }
            };
        })();
    </script>
</div>
Run Code Online (Sandbox Code Playgroud)

测试输出:

  <script>
    console.log('cl1.myVar1', cl1.myVar1, cl1.vname());
    console.log('cl2.myVar1', cl2.myVar1, cl2.vname());
  </script>
Run Code Online (Sandbox Code Playgroud)

其结果是:

cl1.myVar1 closure 1 closure 1
cl2.myVar1 closure 2 closure 2
Run Code Online (Sandbox Code Playgroud)