大家好,我有下拉列表的问题。我第一次将数据从数据库绑定到 Dropdownlist 并且它工作正常。当我第二次提交表单(单击注册按钮)时,它会自动返回空值。下拉列表第一次填充数据时第二次按下创建按钮后,下拉列表为空控制器代码:// 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>
1 回答
![?](http://img1.sycdn.imooc.com/54584dd900014f6c02200220-100-100.jpg)
红颜莎娜
TA贡献1842条经验 获得超12个赞
因为POST当你在服务器上重新生成表单时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
- 1 回答
- 0 关注
- 276 浏览
添加回答
举报
0/150
提交
取消