подход - 1
По моим сведениям вы можете использовать TempData хранить отправленные данные. Это похоже на класс DataReader, после его чтения данные будут потеряны. Так что сохраненные данные в TempData станут нулевыми.
var Value = TempData["keyName"] //Once read, data will be lost
Так сохраняются данные даже после того, как показано ниже
var Value = TempData["keyName"];
TempData.Keep(); //Data will not be lost for all Keys
TempData.Keep("keyName"); //Data will not be lost for this Key
TempData работает в новых вкладках/Windows также, как и переменная Session делает данные считаны вы можете Живым его.
Также можно использовать переменную сеанса. Только основная проблема заключается в том, что переменная Session очень тяжелая по сравнению с TempData. Наконец, вы также можете хранить данные через контроллеры/область.
подход - 2
Это работает для меня. Это очень просто и не нужно рассматривать какие-либо изменения в Web.Config или зарегистрировать фильтр действий в файле Global.asax.
ok. Итак, сначала создаю простой Action Filter. Это будет обрабатывать запросы Ajax и Non Ajax.
public class MyCustomErrorAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
filterContext.ExceptionHandled = true;
var debugModeMsg = filterContext.HttpContext.IsDebuggingEnabled
? filterContext.Exception.Message +
"\n" +
filterContext.Exception.StackTrace
: "Your error message";
// Это тот случай, когда вам нужно работать с Ajax просит
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new JsonResult
{
JsonRequestBehavior = JsonRequestBehavior.AllowGet,
Data = new
{
error = true,
message = debugModeMsg
}
};
}
// Это тот случай, когда вы регулируете запрос Non Ajax
else
{
var routeData = new RouteData();
routeData.Values["controller"] = "Error";
routeData.Values["action"] = "Error";
routeData.DataTokens["area"] = "app";
routeData.Values["exception"] = debugModeMsg;
IController errorsController = new ErrorController();
var exception = HttpContext.Current.Server.GetLastError();
var httpException = exception as HttpException;
if (httpException != null)
{
Response.StatusCode = httpException.GetHttpCode();
switch (System.Web.HttpContext.Current.Response.StatusCode)
{
case 504:
routeData.Values["action"] = "Http404";
break;
}
}
var rc = new RequestContext
(
new HttpContextWrapper(HttpContext.Current),
routeData
);
errorsController.Execute(rc);
}
base.OnException(filterContext);
}
}
Теперь вы можете реализовать этот фильтр действий на контроллере, а также только на Action. Пример:
Я собираюсь немного не по теме. Я думал, что это немного важно объяснить.
Если вы обратите внимание на вышеуказанную выделенную часть. Я указал порядок действия фильтра действий. Это в основном описывает порядок выполнения Action Filter. Это ситуация, когда у вас есть несколько действий фильтров реализованы через контроллер/метод действия
Эта картина просто указывает на то, что, скажем, у вас есть два действий фильтров. OnActionExecution
начнет выполнение по приоритету, а OnActionExecuted
начнет снизу вверх. Это означает, что в случае OnActionExecuted
Action Filter с наивысшим порядком будет выполняться первым, а в случае OnActionExecuting
Сначала будет выполняться действие фильтра с наименьшим порядком. Пример ниже.
public class Filter1 : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Выполнение начнется здесь - 1
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Выполнение будет двигаться здесь - 5
base.OnActionExecuted(filterContext);
}
}
public class Filter2 : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
// Выполнение будет двигаться здесь - 2
base.OnActionExecuting(filterContext);
}
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
// Выполнение wi будете двигаться здесь - 4
base.OnActionExecuted(filterContext);
}
}
[HandleError]
public class HomeController : Controller
{
[Filter1(Order = 1)]
[Filter2(Order = 2)]
public ActionResult Index()
{
// Выполнение будет двигаться здесь - 3
ViewData["Message"] = "Welcome to ASP.NET MVC!";
return View();
}
}
Вы можете уже знать, что существуют различные типы фильтров в рамках MVC. Они перечислены ниже.
Authorization фильтры
Действие фильтров
Response/Результат фильтры
Исключение фильтры
Внутри каждого фильтра, вы можете задать свойство Order. Это в основном описывает порядок выполнения Action Filters.
@PKKG, yep на данный момент используя TempData .... принял ваш ответ, поскольку он содержит более подробную информацию. Спасибо –