使用ChildAction内的@section添加额外的脚本的网页(Using an @sectio

2019-11-02 12:55发布

我有一个MVC查看它是由一个主视图,并通过添加一些额外的内容@Html.Action

在附加内容(这是一个ChildOnlyAction )我希望能够到一些JS添加到页面,但我想它添加到@RenderSection("Scripts")这是我在布局中已经定义块。

我的孩子动作的视图可以使用此:

@section Scripts {
    //Add scripts
}

到目前为止,我还没有能够得到它的工作,所以如果没有什么会是一种替代方法?

Answer 1:

部分没有局部视图的工作。 你可以使用的扩展方法相结合,我这里所示: https://stackoverflow.com/a/9663249/29407

因此,在您_Layout.cshtml你将不得不在某个位置:

@Html.RegisteredScripts()

然后在你的部分:

@{Html.RegisterScript("~/scripts/foo.js");}


Answer 2:

今天我愿意建立一个全球性的对话,将在一定条件下打开,我需要的脚本是在页面的底部。 正如其他人已经提到,孩子的动作里面@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>

我希望能帮助任何人。



文章来源: Using an @section inside a ChildAction to add additional scripts to a page