我想将所有JavaScript代码保存在一个部分中; 就body在我的主布局页面中的结束标记之前,只是想知道最好的去做,MVC风格.
例如,如果我创建一个DisplayTemplate\DateTime.cshtml使用jQuery UI的DateTime Picker 的文件,而不是将JavaScript直接嵌入到该模板中,那么它将在页面中间呈现.
在我的普通视图中,我可以使用@section JavaScript { //js here }然后@RenderSection("JavaScript", false)在我的主布局中,但这似乎不适用于显示/编辑器模板 - 任何想法?
我尝试这样做的主要动机是获取Javascript,只需要页面底部的部分Javascript和其他Javascript,而不是在部分呈现的页面中间.
这是我正在尝试做的简化示例:
这是在正文之前的Scripts部分的布局.
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
</head>
<body>
@RenderBody()
<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
@RenderSection("Scripts", false)
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
这是使用此布局的示例视图.
<h2>This is the view</h2>
@{Html.RenderPartial("_Partial");}
@section Scripts {
<script type="text/javascript">
alert("I'm a view.");
</script>
}
Run Code Online (Sandbox Code Playgroud)
这是从视图中呈现的部分内容.
<p>This is the partial.</p>
@* this never makes it into the rendered page *@
@section Scripts {
<script type="text/javascript">
alert("I'm a partial.");
</script>
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,视图中指定的标记放在节中,但不包含部分标记.是否可以使用Razor从局部视图填充部分?如果没有,还有哪些其他方法可以获取Javascript,只需要页面底部的部分内容,而不是全局包含它?
我有一个使用Razor作为其视图引擎的MVC3站点.我希望我的网站可以换肤.大多数可能的皮肤都足够相似,可以从共享的主布局中获得.
因此,我正在考虑这个设计:

但是,我希望能够RenderSection在底层调用_Common.cshtml,并让它渲染一个在顶层定义的部分,Detail.cshtml.这不起作用:RenderSection显然只渲染下一层定义的部分.
当然,我可以定义每个皮肤中的每个部分.例如,如果_Common需要调用RenderSection("hd")中定义的部分Detail,我只需将其放在每个部分中_Skin并且它可以工作:
@section hd {
@RenderSection("hd")
}
Run Code Online (Sandbox Code Playgroud)
这导致一些代码重复(因为每个皮肤现在必须具有相同的部分)并且通常感觉很乱.我还是Razor的新手,似乎我可能会遗漏一些明显的东西.
调试时,我可以在WebViewPage.SectionWritersStack中看到已定义部分的完整列表.如果我可以告诉RenderSection在放弃之前查看整个列表,它会找到我需要的部分.唉,SectionWritersStack是非公开的.
或者,如果我可以访问布局页面的层次结构并尝试在每个不同的上下文中执行RenderSection,我可以找到我需要的部分.我可能错过了什么,但我认为没有办法做到这一点.
除了我已经概述的方法之外,还有一些方法可以实现这个目标吗?
正如标题所述,我想在局部视图中定义一个部分.
我测试过的代码如下:
控制器:
public ActionResult Test()
{
return View();
}
public ActionResult PartialTest()
{
return PartialView("_PartialTest");
}
Run Code Online (Sandbox Code Playgroud)
Test.cshtml:
@{
ViewBag.Title = "Test";
}
<h2>Test</h2>
@Html.Action("PartialTest")
Run Code Online (Sandbox Code Playgroud)
_PartialTest.cshtml:
<p>partial Test</p>
@section scripts {
<script type="text/javascript">
$(document).ready(function() {
alert("Test");
});
</script>
}
Run Code Online (Sandbox Code Playgroud)
将该部分scripts放在Test.cshtml中可以正常工作,因此问题不在布局中.
有人知道怎么做吗?
有没有办法从局部视图添加CSS引用到页面,并让它们在页面中呈现<head>(根据HTML 4.01规范的要求)?
c# asp.net-mvc partial-views webforms-view-engine asp.net-mvc-2
我正在使用VSRC在ASP.net MVC4 razor中开发一个JQuery移动应用程序,在cshtml页面部分脚本编写如下.
@section Scripts
{
<script type="text/javascript">
$(document).ready(function () {
jQuery("#register-form").validationEngine();
});
</script>
}
Run Code Online (Sandbox Code Playgroud)
在layout.cshtml我有......
"@RenderSection("Scripts", false)".
Run Code Online (Sandbox Code Playgroud)
它适用于初始页面(首先呈现的页面),但是当它通过"ActionLink"链接到其他页面时,那些在这些页面中编写的节脚本不起作用.
有任何想法吗?
请帮忙,谢谢.
假设我在局部视图中有一个javascript幻灯片放映...
_Slideshow.cshtml:
@{
ViewBag.Title = "Slide Show";
}
<div id="slides">
</div>
<script src="js/slides.min.jquery.js"></script>
<script type="text/javascript">
$(function(){
$('#slides').slides({
// slide show configuration...
});
});
</script>
Run Code Online (Sandbox Code Playgroud)
但我想成为一名优秀的小型Web开发人员,并确保我的所有脚本都位于页面底部.所以我会让我的*_Layout.cshtml*页面看起来像这样:
_Layout.cshtml:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/css/global.css")" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="wrapper">
@RenderBody
</div>
<!-- Being a good little web developer, I include my scripts at the BOTTOM, yay!
-->
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js" type="text/javascript"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
但是UH OH!我现在该怎么做,因为我的幻灯片脚本最终超出了我的jQuery包含范围?!如果我想在每个页面上播放幻灯片,这不会是什么大不了的事,但我只希望幻灯片放映部分视图在某个页面上呈现,并且......我希望我的脚本在底部!该怎么办?
我正在使用具有类似内容的Razor MVC的主布局
@RenderSection("scripts", required: false)
Run Code Online (Sandbox Code Playgroud)
并有部分观点
_partial.cshtml
有这个
@section scripts
{
@Scripts.Render("~/bundles/jquery")
}
Run Code Online (Sandbox Code Playgroud)
另一部分偏见
_partial_inside_partial.cshtml
那也有
@section scripts
{
<script>
$('div').addClass('red');
</script>
}
Run Code Online (Sandbox Code Playgroud)
我有这个代码部分内部的问题,它在页面中间的负载,jquery是在底部?
In ASP.NET Core MVC it is possible to define a script section for a page like this:
@section scripts {
<script>
alert('hello');
</script>
}
Run Code Online (Sandbox Code Playgroud)
And if the the layout contains :
@RenderSection("Scripts", required: false)
Run Code Online (Sandbox Code Playgroud)
your script(s) will be rendered. This come in handy per example to guarantee that the scripts will be rendered after all javascript includes like jQuery.
But how to render a script in a partial view?
在我的局部视图中,.hide函数最初不会为第二人称和第三人称渲染,因此延迟.hide和.fadein也不起作用。我是js和jquery的新手,所以我可能缺少明显的东西...为什么此js脚本无法在部分视图中运行?
一切都在主视图中时一切正常,但是我需要部分视图是因为我不想每15秒重新加载整个页面。我已经做过一些研究,获取html数据类型可能有问题吗?
主视图:
@model IEnumerable<project.Models.MyList>
<div id="scrolllist">
@Html.Partial("_ScrollList")
</div>
@section Scripts{
<script>
function loadScrollListPV() {
$.ajax({
url: "@Url.Action("ScrollList")",
type: 'GET', // <-- make a async request by GET
dataType: 'html', // <-- to expect an html response
success: function(result) {
$('#scrolllist').html(result);
}
});
}
$(function() {
loadScrollListPV();
// re-call the functions each 15 seconds
window.setInterval("loadScrollListPV()", 15000);
});
</script>
}
Run Code Online (Sandbox Code Playgroud)
控制器动作:
public ActionResult ScrollList()
{
return PartialView("_ScrollList", db.MyList.ToList());
}
Run Code Online (Sandbox Code Playgroud)
部分视图:
@model IEnumerable<project.Models.MyList>
<div id="firstperson">
@*Get lastest record and display.*@
@foreach (var …Run Code Online (Sandbox Code Playgroud) 在我的ASP.NET Core 1.1.1应用程序中,模型验证不起作用。我注意到一些默认值views(例如login.cshtml,Register.cshtml在创建VS2017应用程序时创建的)在末尾具有以下代码。但这些默认视图实际上是局部视图。我的视图不是局部视图,是否也应将以下内容添加到我的末尾views?或者我应该在不是部分视图的视图末尾添加什么:
@section Scripts {
@{ await Html.RenderPartialAsync("_ValidationScriptsPartial"); }
}
Run Code Online (Sandbox Code Playgroud) asp.net-mvc ×7
razor ×6
c# ×4
javascript ×3
.net ×1
.net-core ×1
asp.net-core ×1
html ×1
jquery ×1
validation ×1
viewengine ×1