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

大家好,我有下拉列表的问题。我第一次将数据从数据库绑定到 Dropdownlist 并且它工作正常。当我第二次提交表单(单击注册按钮)时,它会自动返回空值。

下拉列表第一次填充数据时

http://img3.mukewang.com/616157b00001c72103150339.jpg

第二次按下创建按钮后,下拉列表为空

http://img2.mukewang.com/616157bb00016f3103020360.jpg

控制器代码:


// 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>


慕娘9325324
浏览 277回答 1
1回答

红颜莎娜

因为POST当你在服务器上重新生成表单时return View();[HttpPost]在返回视图之前,您还需要重新填充操作中的下拉列表。即这一行ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");尝试在 HttpPost 方法中返回 View 之前添加此行。像这样 -....ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");// Redisplay formModelState.Clear();return View();此外,如果您希望在执行创建方法后恢复数据,您必须将模型传回视图。ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");// Redisplay formModelState.Clear();return View(model); // HERE
打开App,查看更多内容
随时随地看视频慕课网APP