在MVC 3视图中排列代码块

时间:2011-09-09 13:26:43

标签: asp.net-mvc asp.net-mvc-3 razor

我的MVC3项目中有一个复杂的View(cshtml)。根据不同的变量,此代码的各个部分必须以不同的顺序显示。如何分离Razor / HTML代码块并将它们“包含”在适当的位置? 寻找类似的东西:

@{ CODEBLOCK 1
...
}

@{ CODEBLOCK 2
...
}

@if (bla==1) {
    include CODEBLOCK 1
    include CODEBLOCK 2
} else {
    include CODEBLOCK 2
    include CODEBLOCK 1
}

我不想使用HtmlPartial,因为我不想将所有变量,模型和其他内容传递给它。

4 个答案:

答案 0 :(得分:7)

您可以使用辅助方法:

@helper CodeBlock1()
{
    ...
}

@helper CodeBlock2()
{
    ...
}

@if (bla==1) {
    CodeBlock1();
    CodeBlock2();
} else {
    CodeBlock2();
    CodeBlock1();
}

作为奖励,它是类型安全的并允许参数。

答案 1 :(得分:1)

布局部分怎么样?

http://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspx

@section CODEBLOCK1 {
...
}

@section CODEBLOCK2 {
...
}

@if (bla==1) {
    @RenderSection("CODEBLOCK1");
    @RenderSection("CODEBLOCK2");
} else {
    @RenderSection("CODEBLOCK2");
    @RenderSection("CODEBLOCK1");
}

答案 2 :(得分:0)

你试过Razor Sections

答案 3 :(得分:0)

虽然我喜欢Morten Christiansen的方法,但我只是抛出一种方法来“移动”页面上的东西,就是使用jQuery来调整事物的位置。

假设有这样的观点:

<div id = "div1">
   Something
</div>
<div id = "div2>
   Something Else
</div>

然后一些jQuery来确定是否要进行交换:

if (someCondition)
{
   $('#div2').insertBefore('#div1');
}

同样,我只是将其作为另一种可能的方式进行调整,这是第一次,但我当然更喜欢Morten的想法。