繁体   English   中英

提交“提交”按钮时,asp.net核心mvc dropdownlist设置为null

[英]asp.net core mvc dropdownlist is set to null when POST of Submit button

大家好,我对dropdownlist有疑问。 我第一次将数据从数据库绑定到Dropdownlist,到目前为止,它仍然可以正常工作。 当我第二次提交表单(单击注册按钮)时,它会自动返回空值。

第一次在下拉列表中填充数据

填写下拉列表时的照片1

我第二次按下创建按钮并且下拉列表为空之后

照片2当我提交表单并且下拉列表为空时

  • 控制器代码:

     // GET method [HttpGet] [Authorize] public IActionResult Register(string returnUrl = null) { ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name"); return View(); } // POST method [HttpPost] [Authorize] [ValidateAntiForgeryToken] public async Task<IActionResult> Register([Bind("Username,NameAndTitle,Password,RoleId")] RegisterViewModel model, string returnUrl = null) { ViewData["ReturnUrl"] = returnUrl; if (ModelState.IsValid) { var user = new ApplicationUser { UserName = model.Username, NameAndTitle = model.NameAndTitle, }; var result = await _userManager.CreateAsync(user, model.Password); if (result.Succeeded) { var role = _userRoles.GetRole(model.RoleId); var userAddedToRole = await _userManager.AddToRoleAsync(user, role.Name); if (userAddedToRole.Succeeded) { _logger.LogInformation("User created a new account with password."); TempData["RegisterUserPassed"] = "Succesfully created account"; } } else { model.InvalidCredentials = "This Username already exist !"; TempData["RegisterUserFailed"] = "This Username already exist"; } } // Redisplay form ModelState.Clear(); return View(); } 
  • 查看代码:

     <div class="input-group"> <span class="input-group-addon"><i class="glyphicon glyphicon-book"></i></span> <select asp-for="RoleId" class="form-control" asp-items="@ViewBag.RoleId"></select> </div> <br /> <button type="submit" class="col-lg-12 col-md-12 col-sm-12 col-xs-12 btn btn-lg btn-primary">Create</button> <h4 hidden class="col-lg-12 col-md-12 col-sm-12 col-xs-12 text-danger " text-danger">@Html.DisplayFor(model => model.InvalidCredentials)</h4> </form> </div> 
  • 型号代码:

     [Required(ErrorMessage = "Username is required")] [DataType(DataType.Text)] public string Username { get; set; } [Required(ErrorMessage ="Name and Title is required")] public string NameAndTitle { get; set; } [Required] [StringLength(100, ErrorMessage = "The {0} must be at least {2}.", MinimumLength = 4)] [DataType(DataType.Password)] public string Password { get; set; } public string InvalidCredentials { get; internal set; } public string RoleId { get; set; } public List<SelectListItem> Roles { get; set;} 

因为在POST上,当您return View();时会在服务器上重新生成表单return View();

返回视图之前,您还需要在[HttpPost]操作中重新填充下拉列表。

即这条线

ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");

尝试添加此行,然后在HttpPost方法中返回View。 像这样 -

....
ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
// Redisplay form
ModelState.Clear();
return View();

同样,如果您希望在执行创建方法后恢复数据,则必须将模型传递回视图。

ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
// Redisplay form
ModelState.Clear();
return View(model); // HERE

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM