使用tempdata作为错误模型

时间:2016-04-28 13:54:23

标签: c# asp.net-mvc

我将TempData用于用户消息。

当我尝试这样做时,它告诉我TempData在当前上下文中不存在。

public class ServerMessage
{
    public void appendAlertMessage(string message, ServerMessageClass messageClass)
    {
        if(TempData["alertMessage"] == null) 
            TempData["alertMessage"] = message;
        else 
            TempData["alertMessage"] += "\n" + message;

        if(TempData["alertClass"] != ServerMessageClass.Error)
            TempData["alertClass"] = messageClass;

    }
}

public class ServerMessageClass
{
    public const string Success = "success";
    public const string Warning = "warning";
    public const string Error = "error";
}

有没有其他方法可以做到这一点?

2 个答案:

答案 0 :(得分:0)

我相信您收到了编译错误。 TempDataControllerBase的属性。所以你不能在控制器类之外使用它。

请参阅此链接:

https://msdn.microsoft.com/en-in/library/system.web.mvc.controllerbase.tempdata(v=vs.118).aspx

根据我的理解,可以在Controller内部进行此检查。您可以在控制器中使用私有方法,但这不是一个好习惯。

答案 1 :(得分:0)

TempData仅存在于Controller本身的上下文中。

您可能需要考虑明确继承Controller类来公开它,或者考虑在您的类中构建您的消息,将TempData设置为返回的值(即消息)。

忽略以下内容(这只是一个想法,但不受支持)

如果您打算对其进行编辑或对其进行更改,可以考虑通过ref关键字将其作为参考传递并以此方式更新:

 // Calling the method (assumingly from your Controller)
 ServerMessage.AppendAlertMessage(string message, ServerMessage messageClass, ref TempData);

然后你应该能够在你的方法中访问它:

public void appendAlertMessage(string message, ServerMessageClass messageClass, ref TempDataDictionary tempData)
{
      // Update the TempData using tempData["foo"] = message, etc.
}