Как вернуться к текущему представлению из OnActionExecuting ((ActionExecutingContext filterContext) NET CORE MVC - PullRequest
0 голосов
/ 30 ноября 2018

У меня есть приложение Net core MVC, и я проверяю модель в CreateAction, с быстрой проверкой.У меня есть класс ValidatorActionFilter, который проверяет все действия контроллера.

Это мой класс

public class ValidatorActionFilter : IActionFilter
{
    public void OnActionExecuting(ActionExecutingContext filterContext)
    {
        if (!filterContext.ModelState.IsValid)
        {
            if (filterContext.HttpContext.Request.Method == "GET")
            {
                var result = new BadRequestResult();
                filterContext.Result = result;
            }
            else
            {
                var controller = filterContext.Controller as Controller;

                object model = controller.ViewData.Model;

                string action = filterContext.ActionDescriptor.RouteValues["action"];

                string controllerName = filterContext.ActionDescriptor.RouteValues["controller"];

                filterContext.Result = controller.View(action, controllerName);

            }
        }
    }

    public void OnActionExecuted(ActionExecutedContext filterContext)
    {

    }
}

При запуске я настраиваю этот

        services.AddMvc(opt =>
            {
                //opt.Filters.Add(typeof(DbContextTransactionFilter));
                opt.Filters.Add(typeof(ValidatorActionFilter));
            })
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_1)
            .AddFeatureFolders()
            .AddFluentValidation(cfg => { cfg.RegisterValidatorsFromAssemblyContaining<Startup>(); });
    }

Тогда у меня есть ProductsController вот таксодержать этот метод

    [HttpPost]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Create(Create.Command command)
    {
        string stop = "1";

        var resultado = await _mediator.Send(command);

        if (!resultado.Exito)
        {
            ModelState.AddModelError(string.Empty, "Hubo un error al guardar el producto");
            _logger.LogCritical("Error al guardar el Producto");
            return View(command);
        }
        return RedirectToAction("AgregadoExitoso");
    }

Я работаю с шаблоном CQRS, в данном случае Create.Command - это мой DTO, который содержит информацию, которую я хочу сохранить в базе данных

Проверкаработает нормально, я вхожу в OnActionExecuting и проверяю, что состояние модели недопустимо, мой вопрос в том, как вернуться к текущему представлению с соответствующей моделью.

Мое представление - это форма для создания продукта

...