如果ModelState.IsValid返回false,则由用户使用发布的数据加载Same View

时间:2017-08-23 12:04:49

标签: c# asp.net-mvc asp.net-mvc-5

我是MVC的新手,我会尽力仔细阐述我的问题。 我有一个带有2个Action方法的控制器,其中一个是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);
}

现在发布表单时,用户填写的所有数据都不会保留。 我想用他的发布数据和填充向用户显示相同的表单 缺少完成注册的细节。

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

2 个答案:

答案 0 :(得分:2)

而不是return RedirectToAction("Register", model);使用return View(model);

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

答案 1 :(得分:1)

首先使用 DataAnnotations [必需] 编辑您的模型,您不希望为空:
        [必需(ErrorMessage =&#34;名称不能为空。&#34;)]
        public string Name {get;组; }

现在编辑你的控制器。

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