私のホスティング会社の Web サーバーは、クラスが [Serializable] としてマークされていないと不平を言い続けます。
ローカルホストで実行すると、問題なく動作します。サーバーにアップロードするとすぐに、シリアル化するように求められますか?
クラスの例:
public class Notification
{
public string Message { get; set; }
public NotificationType NotificationType { get; set; }
public static Notification CreateSuccessNotification(string message)
{
return new Notification { Message = message, NotificationType = NotificationType.Success};
}
public static Notification CreateErrorNotification(string message)
{
return new Notification { Message = message, NotificationType = NotificationType.Error };
}
}
ベースコントローラーで使用するもの。このクラスは、別のメソッドへのリダイレクトが発生したときに TempData に格納されますが、これが原因でしょうか? それでも、ローカル コンピューターではなくサーバー上にあるのはなぜでしょうか。
public abstract class BaseController : Controller
{
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
_notifications = TempData["Notifications"] == null ? new List<Notification>() : (List<Notification>)TempData["Notifications"];
_model = TempData["Model"];
base.OnActionExecuting(filterContext);
}
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
if (filterContext.Result is RedirectToRouteResult)
{
if (_model != null)
TempData["Model"] = _model;
if (_notifications.Count > 0)
TempData["Notifications"] = _notifications;
}
base.OnResultExecuting(filterContext);
}
}
これをオーバーライドするコントローラーは、必要に応じて通知とモデルを追加し、別のアクションへのリダイレクトに追加します。