为了账号安全,请及时绑定邮箱和手机立即绑定

当提交按钮 POST 时,asp.net core mvc 下拉列表设置为 null

当提交按钮 POST 时,asp.net core mvc 下拉列表设置为 null

C#
慕娘9325324 2021-10-09 16:49:27
大家好,我有下拉列表的问题。我第一次将数据从数据库绑定到 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 回答

?
红颜莎娜

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


查看完整回答
反对 回复 2021-10-09
  • 1 回答
  • 0 关注
  • 276 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信