繁体   English   中英

除日期时间外,每个字段都可以编辑。 始终重置为默认值 - MVC ASP.NET Core 3.1 Web 应用程序

[英]Every singe field can be edited except the DateTime. Always resets to defaut - MVC ASP.NET Core 3.1 Web App

我正在创建 MVC ASP.NET Core 3.1 Web 应用程序。 请找到代码....

ApplicationUser.cs class:

public class ApplicationUser : IdentityUser
{
    ...

    [Display(Name = "First Name")]
    public string FirstName { get; set; }

    [Display(Name = "Last Name")]
    public string LastName { get; set; }

    [Display(Name = "Date Of Birth")]
    public DateTime DateOfBirth { get; set; }

    public string Country { get; set; }
}

ProfileModel.cs 查看 class:

public class ProfileModel
{
    ...

    public string FirstName { get; set; }

    public string LastName { get; set; }

    [DisplayFormat(DataFormatString = "{0:MM.dd.yyyy}", ApplyFormatInEditMode = true)]
    public DateTime DateOfBirth { get; set; }

    public string Country { get; set; }
}

来自 AppUserService.cs 的段 class 负责更新用户信息:

public async Task UpdateUserInfo(string id, string firstName, string lastName, string email, DateTime birthDate, string country)
    {
        var user = GetById(id);
        user.Email = email;
        user.FirstName = firstName;
        user.LastName = lastName;
        user.DateOfBirth = birthDate;
        user.Country = country;
        _context.Update(user);
        await _context.SaveChangesAsync();
    }

来自 ProfileController.cs 的段:

[HttpPost]
    public async Task<IActionResult> EditUser(string firstName, string lastName, string email, DateTime birthDate, string country)
    {
        var userId = _userManager.GetUserId(User);

        await _userService.UpdateUserInfo(userId, firstName, lastName, email, birthDate, country);

        return RedirectToAction("Detail", "Profile", new { id = userId });
    }

在 Detail.cshtml 视图中有一个显示出生日期的部分

<dt>Date of birth:/dt>
<dd>
    Html.DisplayFor(x => Model.DateOfBirth)
</dd>

这是模态 window 中的出生日期编辑部分

<div class="ProfileInput">
    <input type="text" asp-for="DateOfBirth" placeholder=" " />
    <div class="ProfileInputUnderline"></div>
    <label>Date of Birth</label>
</div>

如下图所示,我可以编辑除 DateOfBirth 之外的所有属性。 每个属性都会更新,但 DateOfBirth 总是重置为默认值。 我错过了什么? 我将衷心感谢您的帮助。

看图

我看到了问题:您的输入是用asp-for="DateOfBirth"定义的,但您的操作参数称为birthDate

快速而肮脏的解决方案是重命名您的操作参数:

[HttpPost]
public async Task<IActionResult> EditUser(string firstName, string lastName, string email, DateTime dateOfBirth, string country)
{
    var userId = _userManager.GetUserId(User);

    await _userService.UpdateUserInfo(userId, firstName, lastName, email, dateOfBirth, country);

    return RedirectToAction("Detail", "Profile", new { id = userId });
}

更好的选择是将您的POST方法更改为采用ProfileModel参数,这将防止再次发生这种不匹配:

[HttpPost]
public async Task<IActionResult> EditUser(ProfileModel model)
{
    var userId = _userManager.GetUserId(User);

    await _userService.UpdateUserInfo(userId, model.FirstName, model.LastName, model.Email, model.DateOfBirth, model.Country);

    return RedirectToAction("Detail", "Profile", new { id = userId });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM