带有 Razor 的 MVC3 - 避免在部分视图上定义多个 javascript 函数

Posted

技术标签:

【中文标题】带有 Razor 的 MVC3 - 避免在部分视图上定义多个 javascript 函数【英文标题】:MVC3 with Razor - Avoid multiple javascript functions definitions on partial views 【发布时间】:2012-03-20 02:51:47 【问题描述】:

我们需要创建多个相同类型的局部视图,但是这个局部视图有一个javascript函数。如何避免在每个局部视图上定义此函数?我们不想在其他地方定义这个函数。

【问题讨论】:

您可能还想考虑创建一个可重用的局部视图。 【参考方案1】:

我强烈建议更改解决方案以允许外部 javascript 引用。如果无法做到这一点,那么以下可能会起作用。首先,我假设您正在执行以下操作:

/Views/Shared/MyModelPartial1.cs/

@model MyModel

<script type="text/javascript">
  var a = "@Model.SomeStringProperty";
  var b = @Model.SomeNumberProperty;
</script>

<span>Some html!</span>

/Views/Shared/MyModelPartial2.cs/

@model MyModel

<script type="text/javascript">
  var a = "@Model.SomeStringProperty";
  var b = @Model.SomeNumberProperty;
</script>

<div>Different Html Than 1</div>

如果您尝试在两个 Partial 之间共享此 Javascript,则创建另一个可能类似于以下内容的局部视图:

/Views/Shared/MyModelJavascript.cs/

@model MyModel

<script type="text/javascript">
  var a = "@Model.SomeStringProperty";
  var b = @Model.SomeNumberProperty;
</script>

/Views/Shared/MyModelPartial1.cs/

@model MyModel

@Html.Partial("MyModelJavascript", Model)

<span>Some Html!</span>

/Views/Shared/MyModelPartial2.cs/

@model MyModel

@Html.Partial("MyModelJavascript", Model)

<div>Different Html Than 1</div>

【讨论】:

其实我只有一个局部的看法。它可以在多个视图中使用。我想我会采纳你的建议,确实使用全局/外部文件。【参考方案2】:

function 的定义从部分移出到global\external JavaScript 文件中:

外部 JS

function foo ()         
     /* ... code ... */

部分

foo();

或(取决于 foo 的定义方式,您可能希望创建 foo 的实例):

var bar = new foo();

【讨论】:

感谢您的回复。我已经考虑过了,但我想知道是否有其他方法可以在没有外部文件的情况下做到这一点。 您可以在立即执行函数中执行代码,该函数将函数的变量封装在它自己的范围内...

以上是关于带有 Razor 的 MVC3 - 避免在部分视图上定义多个 javascript 函数的主要内容,如果未能解决你的问题,请参考以下文章

MVC3 Razor - 模型和视图

在 MVC3 中登录 Razor 视图

MVC 3 Razor Form Post w/ 多个强类型的部分视图不绑定

带有 Razor 的 MVC3 抛出找不到方法:'System.Object System.Web.Mvc.ControllerBase.get_ViewModel()'

为啥 ASP.NET MVC3 区域和 Razor 视图会产生此错误?

MVC3 razor 获取视图中的浏览器屏幕宽度和高度