在ASP.NET MVC中,有什么区别:
Html.Partial 和 Html.RenderPartialHtml.Action 和 Html.RenderAction我使用ng-view包含AngularJS部分视图,我想根据包含的视图更新页面标题和h1标题标记.这些超出了部分视图控制器的范围,因此我无法弄清楚如何将它们绑定到控制器中的数据集.
如果它是ASP.NET MVC你可以使用@ViewBag来做到这一点,但我不知道AngularJS中的等价物.我搜索过共享服务,事件等但仍无法使其正常工作.任何方式来修改我的例子,所以它的工作将非常感激.
我的HTML:
<html data-ng-app="myModule">
<head>
<!-- include js files -->
<title><!-- should changed when ng-view changes --></title>
</head>
<body>
<h1><!-- should changed when ng-view changes --></h1>
<div data-ng-view></div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我的JavaScript:
var myModule = angular.module('myModule', []);
myModule.config(['$routeProvider', function($routeProvider) {
$routeProvider.
when('/test1', {templateUrl: 'test1.html', controller: Test1Ctrl}).
when('/test2', {templateUrl: 'test2.html', controller: Test2Ctrl}).
otherwise({redirectTo: '/test1'});
}]);
function Test1Ctrl($scope, $http) { $scope.header = "Test 1";
/* ^ how can I put this in title and h1 */ }
function Test2Ctrl($scope, $http) { …Run Code Online (Sandbox Code Playgroud) javascript templates partial-views angularjs angular-routing
我在本节中定义了此部分 _Layout.cshtml
@RenderSection("Scripts", false)
Run Code Online (Sandbox Code Playgroud)
我可以从视图中轻松使用它:
@section Scripts {
@*Stuff comes here*@
}
Run Code Online (Sandbox Code Playgroud)
我正在努力的是如何从局部视图中获取本节内注入的一些内容.
我们假设这是我的视图页面:
@section Scripts {
<script>
//code comes here
</script>
}
<div>
poo bar poo
</div>
<div>
@Html.Partial("_myPartial")
</div>
Run Code Online (Sandbox Code Playgroud)
我需要Scripts从_myPartial局部视图中注入部分内容.
我怎样才能做到这一点?
我有这样的链接:
<a href='Member/MemberHome/Profile/Id'><span>Profile</span></a>
Run Code Online (Sandbox Code Playgroud)
当我点击它时,它会调用这个部分页面:
@{
switch ((string)ViewBag.Details)
{
case "Profile":
{
@Html.Partial("_Profile"); break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
部分页面_Profile包含:
Html.Action("Action", "Controller", model.Paramter)
Run Code Online (Sandbox Code Playgroud)
例:
@Html.Action("MemberProfile", "Member", new { id=1 }) // id is always changing
Run Code Online (Sandbox Code Playgroud)
我怀疑的是我如何将这个"Id"传递给model.parameter部分?
我的控制器是:
public ActionResult MemberHome(string id)
{
ViewBag.Details = id;
return View();
}
public ActionResult MemberProfile(int id = 0)
{
MemberData md = new Member().GetMemberProfile(id);
return PartialView("_ProfilePage",md);
}
Run Code Online (Sandbox Code Playgroud) 理解Rails"魔术"关于渲染部分(并将局部传递到它们中).
为什么这样做:
<%= render "rabbits/form" %>
Run Code Online (Sandbox Code Playgroud)
这项工作:
<%= render "rabbits/form", :parent => @warren, :flash => flash %>
Run Code Online (Sandbox Code Playgroud)
但是这并不能正常工作:
<%= render "rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Run Code Online (Sandbox Code Playgroud)
但这样做:
<%= render :partial =>"rabbits/form", :locals => { :parent => @warren, :flash => flash } %>
Run Code Online (Sandbox Code Playgroud)
另外,我怎样才能查看这些细微差别所以我不需要在SO上打扰人们?
我正在编程的一些网站正在使用ASP.NET MVC和WebForms.
我有局部视图,我想将其包含在webform中.部分视图有一些必须在服务器中处理的代码,因此使用Response.WriteFile不起作用.它应该与禁用javascript一起使用.
我怎样才能做到这一点?
我最近开始玩ASP.net MVC(4),但我无法解决我遇到的这个问题.我相信你知道它很容易.
我基本上试图在我的索引视图中执行以下操作:
所以我想我需要一个局部视图,并且我创建了如下(_CreateNote.cshtml):
@model QuickNotes.Models.Note
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Note</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
在我原来的索引视图(Index.cshtml)中,我正在尝试渲染此局部视图:
@model IEnumerable<QuickNotes.Models.Note>
@{
ViewBag.Title = "Personal notes";
}
<h2>Personal notes</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
@Html.DisplayNameFor(model => model.Content)
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Content)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID …Run Code Online (Sandbox Code Playgroud) 我想知道在部分视图中包含javascript文件的最佳做法是什么.一旦渲染,这将最终作为我的页面的html中间的js包含标记.从我的角度来看,这不是一个很好的方法.它们属于head标签,因此不应阻止浏览器一次性呈现html.
一个例子: 我在'PictureGallery'局部视图中使用了一个jquery picturegallery插件,因为这个局部视图将在几个页面上使用.这个插件只需要在使用这个视图时加载,我不想知道每个局部视图使用哪些插件......
谢谢你的回答.
我正在使用Web应用程序,其中主页面包含两个部分:始终可见的常量块和由3个部分视图之一组成的信息块.每个部分视图都作为AJAX请求的结果出现,并且只加载一次(在jquery提供切换窗口之后).它运作良好,但我遇到了一个问题.
部分视图的html代码包含在常量块和info-block中使用的js函数.当页面加载时,这些函数可以"看到"彼此并且它可以工作,但是resharper找不到函数声明并警告我这一点.我无法通过将它们转移到外部js文件来解决问题,因为razor语法可以在他们的代码中找到.
我该怎么办?
谢谢.
更新:
最后,我决定解决将js代码与视图分离的问题.所以新的问题是如何将razor语法包含到js文件中或者什么是可接受的替代方案.我发现的流行解决方案是使用全局变量,数据属性和我更喜欢的解决方案 - John Katsiotis的RazorJS库.
http://djsolid.net/blog/razorjs---write-razor-inside-your-javascript-files
我希望它能够稳定运行并使Resharper感到高兴.
干杯!
更新:
3年后,我回忆起这个问题,并决定根据我的经验对其进行更新.事实上,现在我宁愿不建议使用额外的库.特别是如果您不是项目团队中唯一的成员......如果您在所有库中得到保证,它们会受到创建者和社区的支持,并且可以轻松集成到您的IDE中(例如,如果使用特殊语法) .你的团队中的所有人都应该知道它是如何工作的.所以现在我建议做下面的事情:
例如:
js文件:
$.api.someInitFunction = function(resources){ ... }
Run Code Online (Sandbox Code Playgroud)
视图:
<script>
$.api.someInitFunction({
urls: { myAction: '@Url.Action("MyAction", "MyController")' },
messages: { error: '@errorMessage' },
consts: { myConst: @myIntConst }
});
</script>
Run Code Online (Sandbox Code Playgroud) 有没有办法在我的控制器A视图中呈现来自其他控制器B的局部视图?
编辑:我写了一个仅适用于两个控制器的局部视图,我不想将它复制到两个Views文件夹中.
我希望每次呈现视图时都显示部分视图,而不是在发生某些事情之后.
partial-views ×10
asp.net-mvc ×8
razor ×5
javascript ×3
asp.net ×2
c# ×2
.net ×1
angularjs ×1
jquery ×1
renderaction ×1
templates ×1
webforms ×1