我将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";
}
有没有其他方法可以做到这一点?
答案 0 :(得分:0)
我相信您收到了编译错误。 TempData
是ControllerBase
的属性。所以你不能在控制器类之外使用它。
请参阅此链接:
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.
}