繁体   English   中英

向ASP.NET Core中的TempData对象添加扩展方法

[英]Add extension method to TempData object in asp.net core

这段代码显示了如何设置然后从TempData对象读取数据:

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

如果我必须经常在我的应用程序中使用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 ,因此它可以让我像这样设置和读取数据

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

我知道它看起来像使用ViewBag但是,我需要拥有ViewBag没有的编译时安全性。 无论如何, ViewBag工作方式与我想要实现的完全不同。

有任何想法吗? 干杯

您可以沿着扩展方法的路走

看起来很整洁:

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");

同样,创建“设置/更新”功能。

我认为您可以实现此目标的另一种方法是扩展Controller / PageModel,在其中您将实现自己的TempData,因为我认为您无法覆盖它。 这可能会使基类混乱,您将在每个将使用该基类的单个控制器中实质上包含许多功能,并且可能共享不需要的功能。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM