asp.net-mvc-3 – 如何将MVC3中的HTML和C#代码与Razor混合?
发布时间:2020-05-23 13:03:15 所属栏目:asp.Net 来源:互联网
导读:我试图显示一个应该切换类的项目列表,以便进行样式设置。这个想法是创建一个foreach循环,循环遍历Model中的所有myObj。 我尝试了以下代码不起作用(因为我做错了) @{ int i = 2; foreach(var myObj in Model) { if (i % 2 == 0) { div class=class
|
我试图显示一个应该切换类的项目列表,以便进行样式设置。这个想法是创建一个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-mvc – 如何使用EF Code First解释为枚举类型
- asp.net-mvc – Elmah日志文件删除,手动还是有设置?
- 你如何在ASP.NET中配置httpOnlyCookies?
- asp.net-mvc – ASP.NET MVC:CSS文件存在时返回302错误
- ASP.NET MVC 6和ASP.NET Core 1.0之间有什么区别以及核心框
- 嵌套字典到嵌套转发器asp.net c#
- asp.net-mvc-3 – 似乎无法有条件地使用Razor的foreach和if
- asp.net – 在代码而不是数据库中存储salt
- asp.net-mvc – MVC 3部分页面(Razor)和MVC 3视图页面与布局
- asp.net-mvc – 在asp.net MVC 3中授权登录URL
推荐文章
站长推荐
热点阅读
