C# 未设置模型值

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

我正在Asp.NETCore中创建一个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);
    }
在这里,我将选项值设置为空,并将评级设置为零,以获取下一个条目,但在视图中,它不显示为空和零,在视图中,它显示先前填充的值

设置以下代码后,应重置这两个字段,但不重置

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请求不,这不是标准方式