在控制器的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语句,然后使用一些手动输入的数据进行发布,浏览器将在所有字段中接收正确的数据。
谢谢您的时间。
答案 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
。