我正在創建 MVC ASP.NET Core 3.1 Web 應用程式。請找出代碼....
ApplicationUser.cs 類:
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 視圖類:
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 類中負責更新用戶資訊的部分:
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>
這是模態視窗中的出生日期編輯部分
<div class="ProfileInput">
<input type="text" asp-for="DateOfBirth" placeholder=" " />
<div class="ProfileInputUnderline"></div>
<label>Date of Birth</label>
</div>
如下圖所示,我可以編輯除 DateOfBirth 之外的所有屬性。每個屬性都會更新,但 DateOfBirth 始終重置為默認值。我錯過了什么?我將衷心感謝您的幫助。

uj5u.com熱心網友回復:
我看到了問題:您的輸入是用 定義的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 });
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/365678.html
標籤:C# asp.net-mvc 约会时间 asp.net-core-3.1
下一篇:我必須使用的集合vs串列
