簡體   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