[英]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.