在控制器的 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)
,当浏览器收到响应时,所有字段都是空的。
但是如果我们把整个代码段都注释掉,只留下return语句,用一些手动输入的数据做一个post,浏览器会收到所有字段的正确数据。
感谢您的时间。
要更新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
在您的助手类中使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句