C# 未设置模型值
我正在Asp.NETCore中创建一个CRUD应用程序 添加操作后,我将重定向到同一视图,并将模型值设置为null,以获取另一个条目 下面是我的代码C# 未设置模型值,c#,asp.net-mvc,asp.net-core-mvc,C#,Asp.net Mvc,Asp.net Core Mvc,我正在Asp.NETCore中创建一个CRUD应用程序 添加操作后,我将重定向到同一视图,并将模型值设置为null,以获取另一个条目 下面是我的代码 public IActionResult Add(OptionMasterVM model) { try { model.QuestionList = context.QuestionMaster.Select(x => new SelectListItem { Text = x
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);
}
在这里,我将选项值设置为空,并将评级设置为零,以获取下一个条目,但在视图中,它不显示为空和零,在视图中,它显示先前填充的值
设置以下代码后,应重置这两个字段,但不重置
model.OptionMaster.OptionValue = string.Empty;
model.OptionMaster.OptionRating = 0;
在Asp.net Core中是否有其他方法将模型对象设置为null?这可能是因为Razor帮助程序使用来自ModelState的值,而不是模型本身。您的OptionValue可能使用帮助器显示,例如:
@Html.TextBoxFor(m => m.OptionMaster.OptionValue)
在操作中更改模型值时,需要在渲染视图之前从ModelState中删除旧值
最简单的方法是打电话
这可能是因为Razor助手使用来自ModelState的值,而不是模型本身。您的OptionValue可能使用帮助器显示,例如:
@Html.TextBoxFor(m => m.OptionMaster.OptionValue)
在操作中更改模型值时,需要在渲染视图之前从ModelState中删除旧值
最简单的方法是打电话
为绑定表单字段显示的值来自
ModelState
,该值基于请求
,视图数据
/视图包
,最后是模型
。显然,发布后,您将在请求中设置值,因此这些值将是模型状态中的值。它是这样工作的,因此当出现验证错误并且用户返回表单以更正错误时,他们发布的值将在那里供他们编辑
长话短说,您需要遵循PRG(Post-Redirect-Get)模式。本质上,发布后,您只会在出现错误时返回视图。如果发布成功,您将重定向。这不仅可以清除ModelState
,还可以防止在用户尝试刷新页面时意外重新发布
如果您想让用户返回到同一视图,只需重定向到同一操作,但您需要执行重定向,而不是返回视图。为绑定表单字段显示的值来自ModelState
,它是基于请求
,视图数据
/视图包
中的值组成的,最后是模型
。显然,发布后,您将在请求中设置值,因此这些值将是模型状态中的值。它是这样工作的,因此当出现验证错误并且用户返回表单以更正错误时,他们发布的值将在那里供他们编辑
长话短说,您需要遵循PRG(Post-Redirect-Get)模式。本质上,发布后,您只会在出现错误时返回视图。如果发布成功,您将重定向。这不仅可以清除ModelState
,还可以防止在用户尝试刷新页面时意外重新发布
如果您想让用户返回到同一视图,只需重定向到同一操作,但您需要执行重定向,而不是返回视图。是Ajax请求吗?您没有重定向到同一视图(要执行此操作,请使用重定向到操作()
)。要解释这种行为,请参阅。如果要使用不同的模型显示视图,请遵循PRG模式“OptionMaster _OptionMaster=new OptionMaster();_OptionMaster=model.OptionMaster;”-这也没有意义。不必要的对象创建。@幸运的是,它不是Ajax请求。不,它不是,它是标准的方式。它是Ajax请求吗?您没有重定向到同一个视图(要这样做,您将使用RedirectToAction()
)。要解释这种行为,请参阅。如果要使用不同的模型显示视图,请遵循PRG模式“OptionMaster _OptionMaster=new OptionMaster();_OptionMaster=model.OptionMaster;”-这也没有意义。不必要的对象创建。@lucky不,这不是Ajax请求不,这不是标准方式