无法在 Razor 页面中的表单传递的 OnPost 上保存或使用绑定模型数据
Cannot Save or Use Binding Model Data on OnPost Passed By Form in Razor Page
我在 razor 页面的 EditUserProfile 中有问题,所以在页面中显示用户信息没有问题,但是当我按下编辑按钮时,我通过表单获取用户信息但我无法保存或用户它。
代码
本页
我什至尝试将用户名保存在变量中,但结果如下
通过表单传递的用户名
正在努力保存
userRepository
方法中的 _User 和 var user 可能指向内存中的同一个对象。我不能确定,因为并非所有代码都是可见的。
这完全取决于userRepository
中的代码。您使用的 ORM 可能有某种缓存,这可能会导致一些奇怪的行为。
在 OnGet 方法中克隆用户,从 GetUserByUserId
到 _User 属性。
public void OnGet()
{
var user = _userRepositiory.GetUserByUserName(HttpContext.User.GetUserId());
_User = new User(){
// set all properties here
};
}
首先,你的_User.UserName="saeed_01",你的图片中username为null,这是因为这行代码还没有执行。当你执行的时候去下一行代码,可以看到用户名是“saeed_01”。
如果您想保存已编辑的 user.I,您可以像这样在 UserRepository
中更改 Save
:
public async Task Save(User user)
{
try
{
_context.Update(user);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
throw;
}
}
并改变
_userRepositiory.Save();
至
await _userRepositiory.Save(user);
更新:
这是您代码中的端点:
您尝试将端点更改为此处:
然后可以看到用户名不为空
这是一个演示:
用户:
public class User {
public int UserId { get; set; }
public string UserName { get; set; }
}
操作:
public IActionResult Index()
{
User _User = new User { UserId = 1, UserName = "sss" };
var username = _User.UserName;
return View();
}
结果:
我在 razor 页面的 EditUserProfile 中有问题,所以在页面中显示用户信息没有问题,但是当我按下编辑按钮时,我通过表单获取用户信息但我无法保存或用户它。
代码
本页
我什至尝试将用户名保存在变量中,但结果如下
通过表单传递的用户名
正在努力保存
userRepository
方法中的 _User 和 var user 可能指向内存中的同一个对象。我不能确定,因为并非所有代码都是可见的。
这完全取决于userRepository
中的代码。您使用的 ORM 可能有某种缓存,这可能会导致一些奇怪的行为。
在 OnGet 方法中克隆用户,从 GetUserByUserId
到 _User 属性。
public void OnGet()
{
var user = _userRepositiory.GetUserByUserName(HttpContext.User.GetUserId());
_User = new User(){
// set all properties here
};
}
首先,你的_User.UserName="saeed_01",你的图片中username为null,这是因为这行代码还没有执行。当你执行的时候去下一行代码,可以看到用户名是“saeed_01”。
如果您想保存已编辑的 user.I,您可以像这样在 UserRepository
中更改 Save
:
public async Task Save(User user)
{
try
{
_context.Update(user);
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
throw;
}
}
并改变
_userRepositiory.Save();
至
await _userRepositiory.Save(user);
更新:
这是您代码中的端点:
您尝试将端点更改为此处:
然后可以看到用户名不为空
这是一个演示: 用户:
public class User {
public int UserId { get; set; }
public string UserName { get; set; }
}
操作:
public IActionResult Index()
{
User _User = new User { UserId = 1, UserName = "sss" };
var username = _User.UserName;
return View();
}
结果: