我正在Asp.Net Core中创建一个CRUD应用程序
添加操作后,我将重定向到同一视图,并将模型值设置为null以获取另一个条目
以下是我的代码
public IActionResult Add(OptionMasterVM model)
{
try
{
model.QuestionList = context.QuestionMaster.Select(x => new SelectListItem { Text = x.QuestionName, Value = x.QuestionId.ToString() }).ToList();
if (HttpContext.Request.Method == "POST")
{
OptionMaster _optionmaster = new OptionMaster();
_optionmaster = model.OptionMaster;
using (var ctx = new QuestionnaireEntities(_configuration))
{
ctx.OptionMaster.Add(_optionmaster);
ctx.SaveChanges();
}
TempData["Msg"] = "Option Added Successfully , Add Another Option";
model.OptionMaster.OptionValue = string.Empty;
model.OptionMaster.OptionRating = 0;
return View(model);
}
}
catch (Exception ex)
{
logger.LogError(ex);
}
finally
{
}
return View(model);
}
这里我将Option Value设置为空并评级为Zero以进行下一个输入,但是在视图中它不显示空和零,在视图中它显示先前填充的值。
设置下面的代码后,这两个字段应该重置,但它们不是
model.OptionMaster.OptionValue = string.Empty;
model.OptionMaster.OptionRating = 0;
在Asp.net Core中有没有其他方法可以将模型对象设置为null?
答案 0 :(得分:2)
这可能发生,因为Razor助手使用的是ModelState中的值,而不是模型本身。您的OptionValue可能使用帮助程序显示,例如:
@Html.TextBoxFor(m => m.OptionMaster.OptionValue)
在操作中更改模型值时,需要在渲染视图之前从ModelState中删除旧值。
最简单的方法是拨打ModelState.Clear()
model.OptionMaster.OptionValue = string.Empty;
model.OptionMaster.OptionRating = 0;
ModelState.Clear(); // ensure these changes are rendered in the View
return View(model);
答案 1 :(得分:1)
为绑定表单字段显示的值来自ModelState
,它是根据Request
,ViewData
/ ViewBag
以及最后Model
的值组成的。发布后,很明显,您将在Request
中设置值,因此ModelState
中的值为ModelState
。它以这种方式工作,因此当出现验证错误并且用户返回到表单以纠正错误时,他们发布的值将在那里供他们编辑。
长短,你需要遵循PRG(Post-Redirect-Get)模式。基本上,发布后,您只返回错误视图。如果帖子成功,则重定向。这不仅可以清除function myInsertTest() {
Word.run(function(context) {
var selectedRange = context.document.getSelection();
selectedRange.insertText("myText", "End");
selectedRange.insertText("\r\n", "End");
selectedRange.select("End");
return context.sync();
});
}
,还可以防止用户尝试刷新页面时意外重新发布。
如果您想将用户带回同一视图,只需重定向到相同的操作,但您需要进行重定向,而不是返回视图。