C# 发布提交按钮时,asp.net core mvc 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) {

大家好,我对dropdownlist有问题。这是我第一次从数据库将数据绑定到Dropdownlist,到目前为止,它工作正常。当我第二次提交表单时(单击register按钮),它会自动返回空值

首次使用数据填充dropdownlist时

第二次按下创建按钮,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();
    }
    
    //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]
    操作中的下拉列表

    ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
    // Redisplay form
    ModelState.Clear();
    return View(model); // HERE
    
    i、 e.这条线

    ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
    
    尝试在HttpPost方法的返回视图之前添加此行。像这样-

    ....
    ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
    // Redisplay form
    ModelState.Clear();
    return View();
    
    此外,如果希望在执行Create方法后恢复数据,则必须将模型传回视图

    ViewData["RoleId"] = new SelectList(_MedicalCenterOrdinanceContext.AspNetRoles,"Id","Name");
    // Redisplay form
    ModelState.Clear();
    return View(model); // HERE
    

    你能格式化你的代码以提高可读性吗?删除多余的空行,适当缩进。当然,肯尼对此感到抱歉…好多了。我加了一些相关的标签,让我直说吧。您单击“创建”按钮,它会转到控制器,然后(我猜它会回来),当您再次单击它时,那里没有任何值?@JamesS yeap当我第一次加载view dropdownlist时,它已经充满了数据。在我创建一个新用户并单击“创建”按钮后,数据被正确发送到数据库,但dropdownlist这次为空。问题解决了,我需要在http post中重新填充下拉列表