这是我在局部视图中的代码
@model Contoso.MvcApplication.Models.Exercises.AbsoluteArithmetic
@using(Html.BeginForm())
{
<div>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number1</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">+</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">@Model.Number2</span>
<span style="width: 110px; float:left; text-align:center; font-size:2.5em;">=</span>
<span>
@Html.EditorFor(model => model.Result)
@Html.ValidationMessageFor(model => model.Result)
</span>
</div>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Run Code Online (Sandbox Code Playgroud)
请注意我的代码底部,我有一个@section,我意识到如果我在那里设置一个断点,它就不会运行.如果我在_Layout.cshtml中移动该行,则效果很好,但这不是主意.
如何在部分剃刀视图中告诉MVC4我想添加该库?
鉴于MVC3和Razor引擎,我得到了
_MasterLayout.cshtml
@RenderSection("JavaScript", required: false)
..
..
@RenderBody()
..
Run Code Online (Sandbox Code Playgroud)
View.cshtml与_ViewStart.cshtml中定义的_MasterLayout.cshtml
..
@Html.RenderAction("PartialView", "PartialController")
..
Run Code Online (Sandbox Code Playgroud)
PartialView.cshtml
..
@section JavaScript
{
........
}
..
Run Code Online (Sandbox Code Playgroud)
如何确保部分视图中的JavaScript最终出现在"主布局"部分中?
上述方案不起作用,因为局部视图没有定义主布局.另一方面,视图确实具有定义了RenderSection的布局.如果我将部分JavaScript从部分视图移动到View,Razor知道将其渲染到何处.但是,由于部分视图没有布局,因此它不知道如何处理部分JavaScript,因此不会将其呈现在任何地方.
在我的一个View页面中,我有一个asp.net mvc PartialView.PartialView包含一些javascript(和jquery).在我的asp.net主视图中,我使用ajax在div标签内加载PartialView,如下所示.也就是说,从控制器I返回PartialView("_ DonorEdit"),在我的主页面中,我使用javascript将Part标签的内容替换为PartialView响应.
<div class="content" id="content">
@{Html.RenderPartial("_DonorEdit");}
</div>
Run Code Online (Sandbox Code Playgroud)
除了partialView(_DonorEdit)中包含的javascript之外,一切正常.因此,问题归结为 - 如何在div标签中嵌入javascript并仍然使其正常工作.
仅当从ajax调用返回部分视图时,才会出现此问题.在上面的代码中,如果我直接包含PartialView(在非ajax请求上),那么javascript正常工作.但是如果我稍后使用ajax请求替换div的内容,则PartialView中包含的javascript不起作用.嵌入式javascript根本不会与"部分视图"一起显示.所以似乎有一些其他原因,为什么在ajax请求成功之后,部分视图中嵌入的javascript不会传递给浏览器.
我的javascript代码的一部分
<script type=...>
//Date Picker. This works. I get Calendar popup as expected
$(document).ready(function () {
$("#Donor_BirthDate").datepicker({
dateFormat: "dd-mm-yy",
changeMonth: true,
changeYear: true,
yearRange: "-75:+0"
});
$("#Donor_DateLastDonated").datepicker({
dateFormat: "dd-mm-yy",
changeMonth: true,
changeYear: true,
yearRange: "-20:+1"
});
});
//Dropdown handler. Does not make it in my final View.
function residenceStateChanged(e) {
var url = '@Url.Action("_GetCities", "DropDown")';
var cmbResidenceCityId = $('#ResidenceCityId').data('tDropDownList');
cmbResidenceCityId.loader.showBusy();
$.ajax({
type: 'GET',
url: url,
data: { …Run Code Online (Sandbox Code Playgroud) 所以我有一个案例,布局已经发展变得更加复杂.有通常的事情@section styleIncludes{ ... },然后其他部分定义了每个页面可以选择(但几乎总是)指定像当前页面痕迹的结构的各种事物.所有这些都是部分的原因是因为它们嵌入在布局的结构中.
我发现自己制作了以前页面的副本,因为有大约8个不同的部分,而不是试图记住它们的确切拼写,或者是单独复制/粘贴.
我认为最好为这些创建一个流畅的API,以便我有一些具有8个函数的对象,每个函数都返回对象本身,所以你可以做一些像Sections.Style(一些MVC文本模板或razor delgate) ?).面包屑(等)
主要目的是能够以引导的方式对这些部分进行编码,并强烈键入名称,而不是依赖于完美的键入或复制/粘贴.
然而,剃刀中的扩展/帮助器返回MvcHtmlString,我想@section由完全不同的东西表示.
不是要求你为我写一个完整的解决方案,而只是提出一些关于如何先行的想法.
助手返回什么对象来表示@section声明? 即MvcHtmlString的类比.
你会建议什么样的流畅方法的参数类型,如Style或Breadcrumb? 我希望剃刀传递的能力类似于在部分声明的花括号中编写剃刀.例如,能够访问剃刀页面上声明的局部变量,就像使用常规部分声明一样.我不希望像字符串连接之类的东西.SomeSection("<div...>Bunch of html stuffed in a string</div>")
换句话说,如果我的许多cshtml页面开始像
@{
string title = "Edit Person"
ViewBag.Title = title;
}
@section styles{
.someOneOffPageSpecificStyle { width:59px }
}
@section javascript{
//javascript includes which the layout will place at the bottom...
}
@section breadcrumb{
<a ...>Parent Page</a> > <a ...>Sub Page</a> > @title
}
Run Code Online (Sandbox Code Playgroud)
我宁愿像这样有一些流畅的API,不是真正的代码风格,而是因为它更容易编写代码而不会出现错别字等问题,因为intellisense会帮助:
@{
string title = "Edit Person"
ViewBag.Title = title;
} …Run Code Online (Sandbox Code Playgroud) 在我的ASP.NET MVC3项目中,我有一个_Layout.cshtml由Visual Studio 2010生成的标准,在关闭我的<body>标记后,我放置了一个RenderSection:
_Layout.cshtml:
</body>
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
@RenderSection("ScriptContent", required: false)
</html>
Run Code Online (Sandbox Code Playgroud)
然后在我的Index.cshtml视图中我有:
@model MyApp.ViewModels.MyViewModel
@{ Html.RenderPartial("MyPartial", Model); }
Run Code Online (Sandbox Code Playgroud)
如果我将它@section ScriptContent放在Index.cshtml中,它会正确显示.如果我将它放在我的部分视图中MyPartial.cshtml:
@model MyApp.ViewModels.MyViewModel
@section ScriptContent {
<script src="@Url.Content("~/Scripts/Filters.js")" type="text/javascript"></script>
}
Run Code Online (Sandbox Code Playgroud)
在我的页面来源中,我有:
</body>
<script src="/Scripts/jquery-1.5.1.min.js" type="text/javascript"></script>
</html>
Run Code Online (Sandbox Code Playgroud)
意思@section是没有执行.可能是什么原因?谢谢
我有一个asp.nset-mvc网站,我有一个部分视图,存在于许多不同的视图中.
还有一个.js文件与该部分视图使用的功能相关联.
现在我在每个父视图中包含该js文件,该视图在head部分中包含此局部视图.
我现在想通过从每个父视图中删除对javascript文件的引用并将该引用放在局部视图的主体中来更容易维护.(所以它刚刚在一个地方列出)
有谁看到这种变化有任何不利因素?这是javascript的推荐做法,只能通过特定的局部视图来利用吗?
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?
我创建了一些使用 _layout 部分视图的视图,但我不想包含每个 css 或脚本包。在视图中包含脚本或 css 文件的最佳方法是什么?
<head>
<link href="Content/style.css" .../>
<script src="Scripts/myscript.js" ...></script>
</head>
Run Code Online (Sandbox Code Playgroud)
我怎样才能让视图呈现类似这样的东西?使用部分视图的视图中没有 head 标签。
asp.net-mvc ×7
c# ×2
javascript ×2
jquery ×2
razor ×2
.net-core ×1
asp.net ×1
asp.net-core ×1
c#-4.0 ×1
css ×1
html ×1
razor-2 ×1