我有一个MVC查看它是由一个主视图,并通过添加一些额外的内容@Html.Action
。
在附加内容(这是一个ChildOnlyAction
)我希望能够到一些JS添加到页面,但我想它添加到@RenderSection("Scripts")
这是我在布局中已经定义块。
我的孩子动作的视图可以使用此:
@section Scripts {
//Add scripts
}
到目前为止,我还没有能够得到它的工作,所以如果没有什么会是一种替代方法?
我有一个MVC查看它是由一个主视图,并通过添加一些额外的内容@Html.Action
。
在附加内容(这是一个ChildOnlyAction
)我希望能够到一些JS添加到页面,但我想它添加到@RenderSection("Scripts")
这是我在布局中已经定义块。
我的孩子动作的视图可以使用此:
@section Scripts {
//Add scripts
}
到目前为止,我还没有能够得到它的工作,所以如果没有什么会是一种替代方法?
部分没有局部视图的工作。 你可以使用的扩展方法相结合,我这里所示: https://stackoverflow.com/a/9663249/29407
因此,在您_Layout.cshtml
你将不得不在某个位置:
@Html.RegisteredScripts()
然后在你的部分:
@{Html.RegisterScript("~/scripts/foo.js");}
今天我愿意建立一个全球性的对话,将在一定条件下打开,我需要的脚本是在页面的底部。 正如其他人已经提到,孩子的动作里面@section是不可能的。
我有同样的问题,因为你所做的,使用自定义的助手和js文件应该工作solultion,但我不喜欢,因为平时我工作的JavaScript用剃刀和文件制作的要求更长的加载时间。
在解决方案https://stackoverflow.com/a/9663249/29407如果你喜欢,对我来说没有感谢是有效的。
我想出了一个新的解决方案,如果你分析它是我们有一个控制器和2个部分具有在最终结果不同的位置将被注入一种观点认为是干净的,问题。
我的分析后,我意识到,我们有2次,但有每一次要求控制他们一个控制器,下面是我做到了,我搬到了JavaScript与同名剧本endig一个新的观点。
XDialogController.cs
XDialog.cshtml
XDialogScript.cshtml
然后从子操作方法将在返回的ActionResult之前,一个设置模型或值到TempData对象内的其他视图。
例如:
[ChildActionOnly]
public ActionResult Popup()
{
// pass variable or model if you need it to script view.
TempData[TempDataKeys.ScriptXDialogModel] = new ModelScriptX();
// pass variable or model to regular view.
return PartialView("XDialog", new ModelX());
}
里面你...... Script.cshtml文件,你可以阅读变量或模型,因为你需要。
例如:
@if((TempData[TempDataKeys.DisplayXDialog] as bool?) == true)
{
<script type="text/javascript">
...jquery functions ....
</script>
}
请记住,TempData的只能只能读取一次,可以保持视图内一个变量中的值。
要调用我的对话框中的页面布局我做到以下几点:
<body>
@RenderBody()
@Html.Action("Popup", "XDialog")
@Scripts.Render("~/Scripts/core")
@RenderSection("ExtraScripts", required: false)
@Html.Partial("XDialogScript")
</body>
我希望能帮助任何人。