我使用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";
}有没有其他方法可以做到这一点?
发布于 2016-04-28 21:59:46
我相信你得到了一个编译错误。TempData是ControllerBase的属性。所以你不能在控制器类之外使用它。
请参阅此链接:
https://msdn.microsoft.com/en-in/library/system.web.mvc.controllerbase.tempdata(v=vs.118).aspx
据我所知,将这个检查保持在Controller中是可以的。您可以在控制器中使用私有方法,但这不是一个好的做法。
发布于 2016-04-28 22:00:41
TempData只存在于控制器本身的上下文中。
您可能需要考虑显式继承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.
}https://stackoverflow.com/questions/36916816
复制相似问题