ASP MVC 在局部视图中定义区块

27
如标题所述,我想在部分视图中定义一个区块。
我已测试的代码如下:
控制器:
public ActionResult Test()
{
    return View();
}

public ActionResult PartialTest()
{
    return PartialView("_PartialTest");
}

Test.cshtml:

@{
    ViewBag.Title = "Test";
}

<h2>Test</h2>

@Html.Action("PartialTest")

_PartialTest.cshtml:

<p>partial Test</p>

@section scripts {
    <script type="text/javascript">
        $(document).ready(function() {
            alert("Test");
         });
     </script>
}

在Test.cshtml中放置 scripts 部分是可以正常工作的,因此问题不在布局中。
有人知道应该如何解决吗?

这对我来说似乎解决了问题:https://dev59.com/H2sz5IYBdhLWcg3w8Mmr - Schalk
2个回答

41

31
虽然这是对问题的答案(即不支持),但还是引出了一个问题,为什么局部视图如此受限?在某些应用中,您希望能够创建“小部件”,而创建“小部件”的其他方式除了使用局部视图之外似乎没有别的方法。但是它非常有限,并且严重依赖于其父视图,这完全违背了目的。在MVC Razor中是否有与用户控件(Web Forms)相当的东西? - clockwiseq
2
我知道这是一个老问题,但我正在尝试找到解决方案:想要在渲染小部件的视图中包含特定于'widget'的脚本/ jQuery?有人有好的解决方案吗? - Kevin Dark
编写一些脚本管理器/扩展非常容易,您可以从任何模块调用它,然后有一个方法在您的父/主视图上打印出唯一/不同的脚本标记集。 - Kris Oye
这对于后续版本是否相同?支持在部分中使用节以仅组织与该部分相关的脚本会很好。我猜将它们抽象出来到一个JS文件是另一种解决方案。 - eaglei22

6

我知道这个问题早已过时,但是对于仍然疑惑的人(就像我曾经一样):

你可以通过修改局部视图中的@section scripts { }部分来解决这个问题:

@using (Html.BeginScriptContext())
{
    Html.AddScriptBlock(
        @<script type="text/javascript">
        //rest of script
    );
}

这将允许您在部分视图中使用脚本,并实现类似小部件的结构。希望这有所帮助!

1
我认为这是指由第三方包ForLoop.HtmlHelpers (https://www.nuget.org/packages/Forloop.HtmlHelpers/) 提供的功能。 - Chris Haines
@ChrisHaines - 在这个包中,有一个选项可以使用Html.AddScriptFile("脚本文件路径")扩展方法在局部视图中包含脚本文件的脚本文件,但是您知道如何在同一脚本上下文中在局部视图中添加脚本捆绑吗? - Ashish Shukla

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接