Свойство контроллера не согласовано между различными методами HttpGet в ASP.NET Core MVC - PullRequest
0 голосов
/ 13 января 2019

У меня есть контроллер, который имеет два метода действия, используемые страницей:

Стандартный OnGet, который вызывается при посещении страницы в браузере, и другой метод SortData, который вызывается с помощью тега привязки.

Оба эти метода взаимодействуют с одним и тем же свойством контроллера, но, похоже, существуют две разные ссылки на объекты для каждого из методов, поскольку данные внутри SortData не соответствуют дате в OnGet.

Кроме того, если я не буду инициализировать это свойство внутри конструктора контроллера, но внутри метода OnGet, оно будет нулевым внутри SortData, даже если OnGet был вызван первым.

Мой вопрос: как мне заставить SortData использовать то же свойство, которое использует OnGet?

Код выглядит так:

public class MyController : Controller
{
    private MyClass Property {get; set;}

    public SearchController()
    {
        Property = new MyClass()
    }

    [HttpGet("sortdata")]
    public IActionResult SortData(string sortAttribute)
    {
        Property.SortData(sortAttribute);
        return View("Index", Property);
    }

    public IActionResult OnGet([FromQuery]string requeststring)
    {
        ViewData["Message"] = requeststring;
        Property.Datas = requeststring == null ?
            searchService.GetAll() :
            searchService.searchByRequestString(requeststring);
        return View("Index", Property);
    }
}

Конечно, служба, используемая в OnGet, также инициализируется в контроллере, но я удалил ее из примера, чтобы сделать ее довольно простой.

Итак, вы можете видеть, что OnGet изменяет свойство и возвращает страницу индекса. На этой странице есть якорь, который вызывает SortData, который также изменяет свойство. Но это не то же самое свойство, что и в OnGet, оно все еще находится в состоянии инициализации. Но я хочу, чтобы фактическое свойство было изменено, а затем вернуло страницу индекса с отсортированными данными.

1 Ответ

0 голосов
/ 13 января 2019

Да, это правильное поведение. Каждый веб-запрос живет в своем собственном контексте. у вас есть два веб-запроса, он создает новый контроллер для каждого запроса, поэтому, конечно, у вас нет одного и того же экземпляра свойства.

Теперь, когда вы знаете, что это правильное поведение, вам нужно задать новый вопрос, который будет касаться того, как вы разделяете свойство в нескольких запросах. Это, однако, неправильный вопрос. Ответ на это «вы не делаете». веб-запросы должны быть без сохранения состояния. вместо этого вы должны добавить параметры сортировки в параметры запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...