【发布时间】:2020-04-11 22:17:08
【问题描述】:
我想将控制器内的 .cshtml 视图的“脚本”部分呈现为字符串。这可能吗?
我真正想做的是使用单独的 ajax 调用获取脚本,然后在加载视图的 html 后也使用 ajax 在脚本上运行 eval。
我已尝试寻找相关主题,但没有找到任何相关内容。一些相关的答案与HtmlHelper.ViewContext.HttpContext.Items[""] 混在一起,但我不确定如何使用它。
我想要的是这样的:string scripts = GetScriptsForView(action, controller); 它返回视图中使用的部分,如下所示:@section Scripts {
澄清(编辑):
我正在尝试用 ajax 调用替换布局页面的“RenderBody()”,这样我就不必每次都加载包含静态标题的布局。
我已经设法用 ajax 调用替换了所有 <a>-tags,替换了包含视图的 <div>,但我无法让 javascripts 工作。
我可以从 cshtml 文件中删除 @section scripts { 并让脚本标签与 html 视图一起加载。这样做的问题是,如果我重新加载页面,它会在调用布局页面的脚本之前调用该视图的脚本,从而导致错误。因此我希望单独加载脚本。
【问题讨论】:
-
与其解释你想要什么,不如试着解释原因,或者你尝试过的任何事情。视图中需要的脚本是动态的吗?
-
@AsheraH 很确定我解释了原因。
What I want to do is get the scripts with a separate ajax call and then run eval on the script after loading the html of the view also with ajax.。这是为了动态加载cshtml视图的脚本部分。 -
你为什么要这样做?您尝试使用此解决方案解决的实际问题是什么?对我来说,它看起来像XY problem。如果你加载一个部分视图,它有一个脚本标签,并且在文档中准备了一些代码,那么你会做同样的事情。
-
我想使用 ajax 加载没有布局的视图。脚本在脚本部分,没有布局文件就不会包含在内。
-
如果您返回
PartialView(),它将返回不带布局且不带脚本部分的视图。如果您也想要脚本,只需返回View()它将包括布局和脚本部分。
标签: c# asp.net .net asp.net-mvc razor