asp.net core mvc 2.1 возвращает заполненную модель в браузер и теряет все поля - PullRequest
0 голосов
/ 20 января 2019

В действии контроллера Create, основанном на вводе пользователем, мы планируем заполнить объект модели некоторыми данными, чтобы минимизировать ввод данных:

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create(Item item, string str)
{
    // if only str is provided
    if (string.IsNullOrEmpty(item.KeyInfo) && !string.IsNullOrEmpty(str))
    {
        Helpers.FillItemModel(item, str);   //fill data
    }
    else if (ModelState.IsValid)
    {
        _context.Add(item);
        await _context.SaveChangesAsync();
        return RedirectToAction(nameof(Create));
    }

    return View(item);
}

Однако, хотя мы можем подтвердить объект itemзаполнены данными в нескольких полях путем установки точки останова в последней строке: return View(item), когда браузер получает ответ, все поля пусты.

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

Спасибо за ваше время.

1 Ответ

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

Для обновления значения ModelState необходимо сначала сбросить значение ModelState следующим образом:

// if only str is provided
 if (string.IsNullOrEmpty(item.KeyInfo) && !string.IsNullOrEmpty(str))
 {
    ModelState.Clear();
    Helpers.FillItemModel(item, str);   //fill data
 }

ModelState.Clear() сбросит всю модель. Если вы не хотите этого и просто хотите обновить значение нескольких полей, оставив неизменным значение другого поля, используйте ModelState["fieldName"].Value = "newValue в своем классе помощника.

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