使用Lambda表达式来帮助MVC razor View

时间:2016-07-13 04:03:49

标签: c# asp.net-mvc razor lambda

更新:我只是在寻找有关如何实施 IsHighlighted 方法的提示

我重复了以下类型的代码:

$.when( $.ajax( "https://httpbin.org/get?Z=Y,X,W" ), 
        $.ajax( "https://httpbin.org/get?A=B,C,D" ) )
  .then( goodFetches, badFetches );

每个X也有一个<div class="@GetCssClass(Model.IsProperty1Highlighted)">@Model.Property1 <div class="@GetCssClass(Model.IsProperty2Highlighted)">@Model.Property2 <div class="@GetCssClass(Model.IsProperty3Highlighted)">@Model.Property3 属性太丑了,如果我有一个方法可以做这样的事情会很好:

IsPropertyXHighlighted

我认为这对表达式是可行的,但我不知道如何。关于如何做到这一点的任何提示或更清洁的方法来获得类似的结果?

例如:让我们说Proprty1需要突出显示,因为它是一个日期时间,它是星期四,Property2需要突出显示,因为它是布尔值而且为false,属性3是整数,甚至需要突出显示< / p>

1 个答案:

答案 0 :(得分:1)

我认为你的第一位看起来像这样:

public static class HtmlExtensions
{
    public static IHtmlString GetHighlightClass(this HtmlHelper htmlHelper, bool shouldHighlight)
    {
        return shouldHighlight ? MvcHtmlString.Create("highlight") : null;
    }
}

如果应该突出显示某些内容的规则,则可能有另一个静态类:

public class HighlightHelper
{
    public static bool IsHighlighted(object obj)
    {
        bool shouldHighlight = false;

        if(obj is DateTime)
        {
            var date = (DateTIme)obj;
            shouldHighlight = date != null && date.DayOfWeek == DayOfWeek.Thursday;
        }
        else if(obj is int)
        {
            var number = (int)obj;
            shouldHighlight = number % 2 == 0;
        }
        // et cetera...

        return shouldHighlight;   
    }
}

然后你可以使用与你的第二个猜测类似的东西:

<div class="@Html.GetHighlightClass(HighlightHelper.IsHighlighted(Model.Property1))">@Model.Property1</div>

您可以通过移动HtmlHelper中的IsHighlighted检查来清理它:

public static IHtmlString GetHighlightClass(this HtmlHelper htmlHelper, object obj)
{
    bool shouldHighlight = HighlightHelper.IsHighlighted(obj);
    return shouldHighlight ? MvcHtmlString.Create("highlight") : null;
}

然后你的观点可能有这个:

<div class="@Html.GetHighlightClass(Model.Property1)">@Model.Property1</div>

并且,为了证明它有效,一些测试:

using System;

using FluentAssertions;
using NUnit.Framework;

namespace YourNamespace.Tests
{
    [TestFixture]
    public class HighlightHelperTests
    {
        [Test]
        public void HighlightHelper_Int_Tests()
        {
            bool shouldHighlight = false;

            shouldHighlight = HighlightHelper.IsHighlighted(3);
            shouldHighlight.Should().BeFalse();

            shouldHighlight = HighlightHelper.IsHighlighted(14);
            shouldHighlight.Should().BeTrue();
        }

        [Test]
        public void HighlightHelper_DateTime_Tests()
        {
            bool shouldHighlight = false;

            shouldHighlight = HighlightHelper.IsHighlighted(new DateTime(2016, 7, 13));
            shouldHighlight.Should().BeFalse();

            shouldHighlight = HighlightHelper.IsHighlighted(new DateTime(2016, 7, 14));
            shouldHighlight.Should().BeTrue();
        }
    }
}