asp.net-mvc-3 – 如何将MVC3中的HTML和C#代码与Razor混合?
发布时间:2020-12-15 18:39:41 所属栏目:asp.Net 来源:网络整理
导读:我试图显示一个应该切换类的项目列表,以便进行样式设置。这个想法是创建一个foreach循环,循环遍历Model中的所有myObj。 我尝试了以下代码不起作用(因为我做错了) @{ int i = 2; foreach(var myObj in Model) { if (i % 2 == 0) { div class="class1" } els
我试图显示一个应该切换类的项目列表,以便进行样式设置。这个想法是创建一个foreach循环,循环遍历Model中的所有myObj。
我尝试了以下代码不起作用(因为我做错了) @{ int i = 2; foreach(var myObj in Model) { if (i % 2 == 0) { <div class="class1"> } else { <div class="class2"> } Html.Partial(...); </div> i += 1; } } 什么是正确的方式来完成这个? 更新 我也尝试了以下代码,虽然编译,但并不渲染任何HTML代码(我确定模型中有对象)。 @{ int i = 2; foreach(var myObj in Model) { if (i % 2 == 0) { @:<div class="class1"> } else { @:<div class="class2"> } Html.Partial(...); @:</div> i += 1; } } 这是被调用的部分类 <div class="class"> <div class="class2"> @if (string.IsNullOrEmpty(var)) { @var2 } else { @var } </div> <div class="class3"> @var3 </div> </div> <div class="class4"> <p>var4</p> <ul class="class5"> <li>element1</li> <li>element2</li> </ul> </div> 对不起,我不能发布实际的名称和变量。 解决方法
我们开始改进你的代码。
>改进步骤1: @foreach(var myObj in Model.Select((model,index) => new { model,index })) { <div class="class@(myObj.index % 2 == 0 ? "1" : "2")"> @Html.Partial("_Foo",myObj.model) </div> } >改进步骤2(使用类的自定义HTML助手): @foreach(var myObj in Model.Select((model,index })) { <div class="@Html.MyClass(myObj.index)"> @Html.Partial("_Foo",myObj.model) </div> } MyClass定义如下: public static string MyClass(this HtmlHelper html,int index) { return (index % 2 == 0) ? "class1" : "class2"; } >改进步骤3是最先进的(使用Templated Razor Delegates): @Model.List( @<div class="@item.MyClass"> @Html.Partial("_Foo",@item.Model) </div> ) 列表扩展方法如下所示: public class ModelHolder<T> { public T Model { get; set; } public string MyClass { get; set; } } public static class RazorExtensions { public static HelperResult List<T>( this IEnumerable<T> items,Func<ModelHolder<T>,HelperResult> template ) { return new HelperResult(writer => { foreach (var item in items.Select((model,index })) { var myClass = item.index % 2 == 0 ? "class1" : "class2"; template(new ModelHolder<T> { Model = item.model,MyClass = myClass }).WriteTo(writer); } }); } } 我投票改进3号,比原来的foreach循环更好,更简洁。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 如何在ASP.NET 5中使用SignalR
- asp.net – Windows Azure我可以在同一个额外的小实例或小实
- 将typescript定义文件编译到wwwroot文件夹时出现“重复标识
- controller – 基类中的ExecuteCore()在MVC 4 beta中未触发
- Asp.net MVC中Razor常见的问题与解决方法总结
- asp.net-mvc – 如何查看mvc应用程序中的所有视图
- ASP.NET httpHandlers和处理程序
- asp.net – 无法从代码背后更改CssClass
- asp.net-mvc – 如何从MVC控制器返回Json对象到视图
- asp.net-mvc – MVCMailer SendAsync和删除附件
推荐文章
站长推荐
- asp.net-mvc-3 – ASP MVC 3测试控制器调用Model
- asp.net-mvc – 在某些视图中隐藏渲染页面Razor
- asp.net-mvc-3 – MVC3不显眼的验证在IE中不起作
- asp.net-mvc – 如何在ASP.NET MVC中使用queryst
- asp.net-mvc – ASP.NET MVC3 IIS7.5:Cache-Con
- asp.net – 循环访问复选框列表
- asp.net-mvc – 使用DTO而不是域实体进行ASP.NET
- asp.net-mvc – 在asp.net mvc请求中捕获windows
- asp.net-mvc – ASP.NET MVC提醒我旧的经典ASP意
- 无法使用dotnetopenauth通过twitter进行身份验证
热点阅读