html属性中的多个if语句 - MVC剃刀

时间:2011-10-05 15:40:08

标签: asp.net-mvc-3 razor

如果我想在html属性中使用多个if语句,我可能会这样做:

  <input type="button" value="Bad, the title has a lot of excess spacing" title="@if(SomeModel.condOne) {
                              <text>this</text>
                              }
                              @if (SomeModel.CondTwo)
                              {
                              <text> is</text>
                              }
                              @if (SomeModel.CondThree)
                              {
                              <text> a title</text>
                              }      
                             " />

但是这会产生许多需要截断的空白空间。所以这有效:

  <input type="button" value="Good, the title is condenced" title="@if(SomeModel.condOne) {<text>this</text>}@if (SomeModel.CondTwo){<text> is</text>}@if (SomeModel.CondThree){<text> a title</text>}" />

同样的原则可以应用于具有多个类的元素(例如class =“oddrow class1” - &gt; class =“evenrow class2”)

但如果这是一个很长的路线,那可能很难理解。如果您触摸括号或Ctrl-K,Ctrl-D(任何下一个开发人员可能会这样做),visual studio都会习惯将该语句分成多行。

是否有更好或更全面的方法在MVC剃须刀的行中实现多个属性条件?

2 个答案:

答案 0 :(得分:0)

我建议创建一个小助手方法,返回所需的文本。

你必须传递它SomeModel并在该方法中检查你的状况,这样你就可以看到更好的东西并且更容易维护。

例如:

public static class HtmlHelpers
{
    public static string FetchTitle(this HtmlHelper helper, SomeModel model)
    {
        //Your logic here.
    }
}

您可以在Jon Galloway's blog上阅读有关Html Helper方法的所有信息。

这就是我学会如何使用它们的地方。

答案 1 :(得分:0)

为什么不这样做:

title="@if(SomeModel.condOne) { <text>this</text> }
       @if (SomeModel.CondTwo) { <text> is</text> }
       @if (SomeModel.CondThree) { <text> a title</text> }      
                             " />

如果您使用相同的逻辑,Helper是有意义的,特别是假设相同的模型,但您可能还想考虑使用Func<>表达式或Action<>表达式的帮助程序。这样,它就不会绑定到一个模型。