向 asp.net 核心中的 TempData 对象添加扩展方法
Add extension method to TempData object in asp.net core
这段代码展示了如何设置并从 TempData
对象中读取数据:
TempData["ErrorMessage"] = "some message";
var foo = TempData["ErrorMessage"];
如果我必须在我的应用程序中经常使用 TempData["ErrorMessage"]
,那么在开发新东西时总是存在在密钥中输入错误的风险。
我正在考虑一种更安全的方法来防止这种情况发生,所以我创建了一个 class:
/// <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
与我想要实现的完全不同。
有什么想法吗?
干杯
您可以沿着扩展方法的道路前进
看起来很整洁:
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,因为我认为您无法覆盖它。这可能会使基础 class 变得混乱,并且您实际上将在每个控制器中包含大量功能,您将在其中使用该基础 class 并且可能会共享您不需要的功能。
这段代码展示了如何设置并从 TempData
对象中读取数据:
TempData["ErrorMessage"] = "some message";
var foo = TempData["ErrorMessage"];
如果我必须在我的应用程序中经常使用 TempData["ErrorMessage"]
,那么在开发新东西时总是存在在密钥中输入错误的风险。
我正在考虑一种更安全的方法来防止这种情况发生,所以我创建了一个 class:
/// <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
与我想要实现的完全不同。
有什么想法吗? 干杯
您可以沿着扩展方法的道路前进
看起来很整洁:
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,因为我认为您无法覆盖它。这可能会使基础 class 变得混乱,并且您实际上将在每个控制器中包含大量功能,您将在其中使用该基础 class 并且可能会共享您不需要的功能。