Изменение цвета шрифта условно в MVC - PullRequest
0 голосов
/ 22 января 2020

Я новичок в MVC и все еще изучаю лучший способ go о вещах.

Моя проблема в том, что я хочу условно изменить цвет шрифта. Например, если что-то удаляется. Я хочу, чтобы цвет шрифта элемента изменился на красный.

Для справки я добавлю соответствующие данные к этому вопросу ниже.

ПРОСМОТР (Что я хочу при удалении изменить на красный)

<div class="well text-center">
  <h1><b>Purchase Order @Html.DisplayFor(model => model.OrderID)</b></h1>    
</div>

Контроллер

public ActionResult DeleteConfirmed(int id)
{
    PurchaseOrder purchaseOrder = db.PurchaseOrders.Find(id);
    purchaseOrder.deleted = !purchaseOrder.deleted;
    db.SaveChanges();
    db.Entry(purchaseOrder).Reference("Supplier").Load();
    if (purchaseOrder.deleted)
    {
        TempData["message"] = string.Format("Purchase Order - {0} has been deleted\nCompany: {1}\nExpected Date:{2}\nNotes:{3}\n\nLink: {4}/PurchaseOrders/Details/{5}", purchaseOrder.ID, purchaseOrder.Supplier.Company, purchaseOrder.DeliveryDate, purchaseOrder.Details, IGT.baseUrl, purchaseOrder.ID);
    }
    else
    {
        TempData["message"] = string.Format("Purchase Order - {0} has been undeleted\nCompany: {1}\nExpected Date:{2}\nNotes:{3}\n\nLink: {4}/PurchaseOrders/Details/{5}", purchaseOrder.ID, purchaseOrder.Supplier.Company, purchaseOrder.DeliveryDate, purchaseOrder.Details, IGT.baseUrl, purchaseOrder.ID);

    }
    return RedirectToAction("Index");
}

Спасибо!

Ответы [ 2 ]

1 голос
/ 22 января 2020

Просто будьте проще :)

Поместите интервал вокруг DisplayFor и используйте троичный оператор в удаленном свойстве, чтобы установить класс css, который либо сделает текст красным, если удален, либо другого цвета. если нет.

<div class="well text-center">
  <h1>
     <b>Purchase Order <span class="@(Model.deleted ? "DeletedCSSClass" : "ActiveCSSClass")"> @Html.DisplayFor(model => model.OrderID)</span></b>
  </h1>    
</div>
0 голосов
/ 22 января 2020

Похоже, вы используете bootstrap, так что вот один подход.

Создайте класс, представляющий ваши цвета:

public sealed class TextColour
{
    public string CssClass { get; }

    private static IDictionary<string, TextColour> _instances = new Dictionary<string, TextColour>();

    private TextColour(string cssClass)
    {
        CssClass = cssClass;
    }

    private static TextColour GetInstance(string cssClass)
    {
        if (!_instances.ContainsKey(cssClass))
        {
            _instances[cssClass] = new TextColour(cssClass);
        }

        return _instances[cssClass];
    }

    public static TextColour Primary => GetInstance("text-primary");
    public static TextColour Secondary => GetInstance("text-secondary");

    // Add others here
}

Добавьте свойство в модель представления:

public class PurchaseOrderModel
{
    public bool Deleted { get; set; }

    public TextColour TextColour => Deleted ? TextColour.Primary : TextColour.Secondary;
}

Тогда по вашему мнению:

<div class="well text-center @Model.TextColour.CssClass">
  <h1><b>Purchase Order @Html.DisplayFor(model => model.OrderID)</b></h1>    
</div>
...