Добавить метод расширения к объекту TempData в ядре asp.net - PullRequest
0 голосов
/ 29 марта 2019

Этот фрагмент кода показывает, как установить и затем прочитать данные из объекта TempData:

TempData["ErrorMessage"] = "some message";
var foo = TempData["ErrorMessage"];

Если мне приходится очень часто использовать TempData["ErrorMessage"] в моем приложении, всегда естьриск сделать опечатку в ключе при разработке нового материала.Я думал о более безопасном способе предотвратить это, поэтому я создал класс:

/// <summary>
/// Contains a list of keys which are used in TempData across the controllers
/// </summary>
public static class TempDataKeys
{
    /// <summary>
    /// Stores the error message which is optionally dispalyed in the Shared/_ErrorMessage partial view defined in the _Layout.cshtml
    /// </summary>
    public const string ErrorMessage = "ErrorMessage";
}

, а затем установил и прочитал данные следующим образом:

TempData[TempDataKeys.ErrorMessage] = "some message";
var foo = TempData[TempDataKeys.ErrorMessage];

СейчасЯ думаю, есть ли другой способ достичь аналогичной цели путем создания метода расширения для TempData, поэтому он позволил бы мне устанавливать и читать данные, подобные этим

TempData.ErrorMessage = "some message";
var foo = TempDataKeys.ErrorMessage;

Я знаючто это может выглядеть как использование ViewBag, однако мне нужно иметь безопасность во время компиляции, которой нет у ViewBag.В любом случае, ViewBag работает совершенно иначе, чем я хочу достичь.

Есть идеи?Приветствия

1 Ответ

4 голосов
/ 29 марта 2019

Вы можете пойти по пути методов расширения

выглядит довольно аккуратно:

public static class Extension
{
    public const string _ERROR = "ErrorMessage";

    public static void SetErrorMessage(this ITempDataDictionary @this, string message)
    {
        @this[_ERROR] = message;
    }

    public static string GetErrorMessage(this ITempDataDictionary @this) =>
        @this[_ERROR]?.ToString();
}

И тогда вы можете просто получить его вот так var message = TempData.GetErrorMessage(); и установить его, используя TempData.SetErrorMessage("Some Error");

Аналогичным образом создайте функции Set / Update.

Я думаю, что другим способом достижения этой цели является расширение Controller / PageModel, где вы будете реализовывать свои собственные TempData, потому что я не думаю, что вы можете их переопределить. Это может привести к беспорядку в базовом классе, и вы, по сути, будете включать множество функций в каждый контроллер, где вы будете использовать этот базовый класс и, возможно, будете делиться функциональностью, которая вам не нужна.

...