asp.net core mvc 2.1将填充的模型返回到浏览器,并且丢失了所有字段

时间:2019-01-20 01:38:12

标签: c# asp.net-core asp.net-core-mvc

在控制器的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);
}

但是,尽管我们可以确认项目对象已经在多个字段中填充了数据,但是通过在最后一行return View(item)处设置断点,当浏览器获得响应时,所有字段均为空。

但是,如果我们注释掉整个代码段,仅保留return语句,然后使用一些手动输入的数据进行发布,浏览器将在所有字段中接收正确的数据。

谢谢您的时间。

1 个答案:

答案 0 :(得分:1)

要更新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将重置整个模型。如果您不希望这样做,而只想更新几个字段的值,保持其他字段的值不变,则在您的帮助器类中使用tk.Button