除日期时间外,每个单独的字段都可以编辑。始终重置为默认值 - MVC ASP.NET Core 3.1 Web App
Every singe field can be edited except the DateTime. Always resets to defaut - MVC ASP.NET Core 3.1 Web App
我正在创建 MVC ASP.NET 核心 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 });
}
我正在创建 MVC ASP.NET 核心 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 });
}