我一直在关注有关基本 CRUD 操作的 EF 核心教程,但在从 ViewModel 获取数据时遇到问题。
我遵循他们建议的做法,在以下操作中使用
TryUpdateModel
(或在我的具体情况下,TryUpdateModelAsync
)。
[HttpPost, ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<IActionResult> EditPost(int id)
{
var versionToUpdate = await _context.Versions.FirstOrDefaultAsync(a => a.Id == id);
var editModel = new VersionEditModel() { Version = versionToUpdate };
if (await TryUpdateModelAsync(
editModel.Version,
"Version",
a => a.Name,
...further code removed for brevity
在过去,我会在动作签名中传递模型本身,即
public async Task<IActionResult> EditPost(VersionEditModel editModel)
但教程中的建议是仅使用 ID,从数据库中获取项目并对其运行
TryUpdateModel
。
这一切都有效,但我想访问一个已作为 ViewModel 的一部分添加到操作中的值,但我似乎无法访问它。
如果我将模型作为附加参数添加到签名中,就像这样POST
我可以使用 public async Task<IActionResult> EditPost(int id, VersionEditModel editModel)
访问它,但
editModel
不再正常工作。我认为一定有办法获取这些数据,但我无法找出获取它的正确方法。
我的主要问题是试图找到正确的词语来解释我的问题和我想要的东西,所以如果有些事情没有意义,请要求澄清。
TryUpdateAsync
然后根据名称自动选取。所以在我的 ViewModel 中我有以下属性
public async Task<IActionResult> EditPost(int id,
int[] myListOfInts,
int myInt,
bool myBool)
当它们
//other properties removed for brevity
public int MyInt{ get; set; }
public List<int> MyListOfInts{ get; set; } = new();
public bool MyBool{ get; set; }
//other properties removed for brevity
到达端点时,模型绑定器会自动拾取它们。它并不理想,因为 ViewModel 中的名称更改会破坏自动模型绑定,但它可以工作。