gpt4 book ai didi

asp.net-mvc-3 - 如何使用 Razor 在 MVC3 中混合 HTML 和 C# 代码?

转载 作者:行者123 更新时间:2023-12-01 17:07:07 25 4
gpt4 key购买 nike

我正在尝试显示应出于样式目的切换类的项目列表。这个想法是创建一个 foreach 循环,它将循环访问模型中的所有 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) => new { 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>
    )

    其中 List 扩展方法如下所示:

    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) => new { 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-3 - 如何使用 Razor 在 MVC3 中混合 HTML 和 C# 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6320141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com