我的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,因为我不想将所有变量,模型和其他内容传递给它。
答案 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的想法。