C# 发布提交按钮时,asp.net core mvc dropdownlist设置为空
大家好,我对dropdownlist有问题。这是我第一次从数据库将数据绑定到Dropdownlist,到目前为止,它工作正常。当我第二次提交表单时(单击register按钮),它会自动返回空值 首次使用数据填充dropdownlist时 第二次按下创建按钮,dropdownlist为空C# 发布提交按钮时,asp.net core mvc dropdownlist设置为空,c#,asp.net-core-mvc,html-select,C#,Asp.net Core Mvc,Html Select,大家好,我对dropdownlist有问题。这是我第一次从数据库将数据绑定到Dropdownlist,到目前为止,它工作正常。当我第二次提交表单时(单击register按钮),它会自动返回空值 首次使用数据填充dropdownlist时 第二次按下创建按钮,dropdownlist为空 控制器代码: // GET method [HttpGet] [Authorize] public IActionResult Register(string returnUrl = null) {
- 控制器代码:
// 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(); }
//GET方法 [HttpGet] [授权] 公共IActionResult寄存器(字符串返回URL=null) { ViewData[“RoleId”]=新建 SelectList(_medicalcenterrinanceContext.AspNetRoles,“Id”,“Name”); 返回视图(); } //POST方法 [HttpPost] [授权] [ValidateAntiForgeryToken] 公共异步任务寄存器([Bind(“用户名、名称和标题、密码、角色标识”)]RegisterViewModel模型,字符串returnUrl=null) { ViewData[“ReturnUrl”]=ReturnUrl; if(ModelState.IsValid) { var user=新应用程序用户 { UserName=model.UserName, NameAndTitle=model.NameAndTitle, }; var result=await\u userManager.CreateAsync(用户、模型、密码); if(result.successed) { var role=_userRoles.GetRole(model.RoleId); var userAddedToRole=await _userManager.AddToRoleAsync(user,role.Name); if(userAddedToRole.successed) { _logger.LogInformation(“用户使用密码创建了一个新帐户”); TempData[“RegisterUserPassed”]=“已成功创建帐户”; } } 其他的 { model.InvalidCredentials=“此用户名已存在!”; TempData[“RegisterUserFailed”]=“此用户名已存在”; } } //再显示形式 ModelState.Clear(); 返回视图(); }
- 查看代码:
<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>
创造
因为在
上,当您POST
返回视图()时,表单将在服务器上重新生成代码> 在返回视图之前,还需要重新填充
操作中的下拉列表[HttpPost]
i、 e.这条线ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name"); // Redisplay form ModelState.Clear(); return View(model); // HERE
尝试在HttpPost方法的返回视图之前添加此行。像这样-ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
此外,如果希望在执行Create方法后恢复数据,则必须将模型传回视图.... 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
你能格式化你的代码以提高可读性吗?删除多余的空行,适当缩进。当然,肯尼对此感到抱歉…好多了。我加了一些相关的标签,让我直说吧。您单击“创建”按钮,它会转到控制器,然后(我猜它会回来),当您再次单击它时,那里没有任何值?@JamesS yeap当我第一次加载view dropdownlist时,它已经充满了数据。在我创建一个新用户并单击“创建”按钮后,数据被正确发送到数据库,但dropdownlist这次为空。问题解决了,我需要在http post中重新填充下拉列表