C# 如果ModelState.IsValid返回false,则按用户加载具有已发布数据的相同视图

C# 如果ModelState.IsValid返回false,则按用户加载具有已发布数据的相同视图,c#,asp.net-mvc,asp.net-mvc-5,C#,Asp.net Mvc,Asp.net Mvc 5,我是MVC的新手,我会仔细阐述我的问题。 我有一个控制器,有两种动作方法,其中一种是POST方法: [AllowAnonymous] public ActionResult Register() { RegisterViewModel registerModel = new RegisterViewModel(); //Some Code to populate dropdowns for user to select return View(registerModel)

我是MVC的新手,我会仔细阐述我的问题。 我有一个控制器,有两种动作方法,其中一种是POST方法:

[AllowAnonymous]
public ActionResult Register()
{
    RegisterViewModel registerModel = new RegisterViewModel();
    //Some Code to populate dropdowns for user to select
    return View(registerModel);
}

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Register(RegisterViewModel model)
{
    try
    {
        if (ModelState.IsValid)
        {
            //insert data in tables
            RedirectToAction("Register");
        }
        AddErrors(result);
    }
    catch (Exception ex)
    {
        ModelState.AddModelError("", "Error Processing Your Request");
    }

    // If ModelState.IsValid returns false show the form with posted data by user
    return RedirectToAction("Register", model);
}
[AllowAnonymous]
公众行动结果登记册()
{
RegisterViewModel registerModel=新的RegisterViewModel();
//一些用于填充下拉列表供用户选择的代码
返回视图(registerModel);
}
[HttpPost]
[异名]
[ValidateAntiForgeryToken]
公共异步任务寄存器(RegisterViewModel模型)
{
尝试
{
if(ModelState.IsValid)
{
//在表中插入数据
重定向操作(“寄存器”);
}
加法器(结果);
}
捕获(例外情况除外)
{
AddModelError(“,“处理请求时出错”);
}
//如果ModelState.IsValid返回false,则按用户显示包含已发布数据的表单
返回重定向操作(“寄存器”,型号);
}
现在,当表单发布时,用户填写的所有数据都不会持久化。 我想向用户显示相同的表单,并显示其发布的数据和填充 缺少完成注册的详细信息


抱歉,如果这是一个非常基本的问题。如何在同一视图上持久保存数据。

首先使用数据注释[必需]编辑您的模型,您不希望该注释为空,如:
[必需(ErrorMessage=“Name不能为空。”)]
公共字符串名称{get;set;}

现在编辑你的控制器,比如

if (ModelState.IsValid)
{
  //insert data in tables
      RedirectToAction("Register");
}
else
{
return View();
}

首先,使用您不希望为空的DataAnnotations[必需]编辑模型,如:
[必需(ErrorMessage=“Name不能为空。”)]
公共字符串名称{get;set;}

现在编辑你的控制器,比如

if (ModelState.IsValid)
{
  //insert data in tables
      RedirectToAction("Register");
}
else
{
return View();
}

而不是
返回RedirectToAction(“Register”,model)使用
返回视图(模型)


是一个很好的博客,解释了这些差异。

而不是
返回RedirectToAction(“Register”,model)使用
返回视图(模型)


是一个很好的解释差异的博客。

如果它无效,则使用
返回视图(模型)
返回视图并显示验证错误(不是
RedirectToAction(…)
)return RedirectToAction(“Register”,model)调用相同的函数againI还具有EditorTemplate,它在视图上加载并在我返回视图(model)时加载;然后我得到错误,因为具有键“EmploymentType”的ViewData项的类型为“System.Int32”,但必须为“IEnumerable”。请为此启动一个新问题,因为它与此问题的主题没有直接关系。对于该错误,REFERE-在返回ITI之前,需要重新填充并选择视图中使用的列表。如果列表无效,则使用
返回视图(模型)
返回视图并显示验证错误(不是
RedirectToAction(…)
)return RedirectToAction(“Register”,model)调用相同的函数againI还具有EditorTemplate,它在视图上加载并在我返回视图(model)时加载;然后我得到错误,因为具有键“EmploymentType”的ViewData项的类型为“System.Int32”,但必须为“IEnumerable”。请为此启动一个新问题,因为它与此问题的主题没有直接关系。对于该错误,参考-返回视图之前,需要重新填充并选择视图中使用的列表