Razor 将不属于模型的额外参数传递到控制器中
下面的代码显示了我的createcshtml页面和连接到该页面的控制器 它工作正常,但是现在我需要在表单中添加另一个不在GameManagement.Game模型中的字段 此字段称为“CreatorUserId”,在我使用的模型中不存在 但是我应该得到这个字段的值,然后当它不是模型的一部分时将它传递给控制器吗 谢谢 Create.cshtml:Razor 将不属于模型的额外参数传递到控制器中,razor,entity-framework-6,asp.net-core-mvc,Razor,Entity Framework 6,Asp.net Core Mvc,下面的代码显示了我的createcshtml页面和连接到该页面的控制器 它工作正常,但是现在我需要在表单中添加另一个不在GameManagement.Game模型中的字段 此字段称为“CreatorUserId”,在我使用的模型中不存在 但是我应该得到这个字段的值,然后当它不是模型的一部分时将它传递给控制器吗 谢谢 Create.cshtml: @model GameManagement.Game <div> <div> <form as
@model GameManagement.Game
<div>
<div>
<form asp-action="Create">
<div>
<label asp-for="Id"></label>
<input asp-for="Id" />
</div>
<div>
<label asp-for="Description"></label>
<input asp-for="Description" />
</div>
<div>
<label asp-for="DisplayName"></label>
<input asp-for="DisplayName" />
</div>
<div>
<label>Creator User ID</label>
<input id="CreatorUserId" />
<div>
<input type="submit" value="Create" />
</div>
</form>
</div>
</div>
@model GameManagement.Game
创建者用户ID
控制器:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Create([Bind("Id,Description,DisplayName")] Game newGame)
{
// code to send the form information (Id, Description, DisplayName) to a 3rd party API
apiResult = await apiClient.createNewGame(
newGame.Id,
newGame.Description,
newGame.DisplayName,
// CreatorUserId ?? not in Game model....
return View(apiResult);
}
[HttpPost]
[ValidateAntiForgeryToken]
公共异步任务创建([Bind(“Id,Description,DisplayName”)]Game-newGame)
{
//将表单信息(Id、说明、显示名称)发送到第三方API的代码
apiResult=等待apiClient.createNewGame(
newGame.Id,
新游戏,描述,
newGame.DisplayName,
//CreatorUserId??不在游戏模型中。。。。
返回视图(apiResult);
}
正如@johnluke.laue所建议的,最好的解决方案是创建一个新的视图模型以包含所需的属性
如果坚持不创建新的viewmodel,解决方法可能是添加名称属性:
<input id="CreatorUserId" name="CreatorUserId" />
并在服务器端获取价值,如:
public async Task<IActionResult> Create([Bind("Id,Description,DisplayName")] Game newGame, string CreatorUserId)
{
}
public async Task Create([Bind(“Id,Description,DisplayName”)]Game-newGame,string-CreatorUserId)
{
}
您应该创建一个新模型(可能称之为CreateGamePostModel
),该模型具有与Game plus CreatorUserId相同的所有字段。让创建操作使用CreateGamePostModel
作为其唯一参数)。然后,当您发布时,您可以将所有必需的字段转移到游戏中,然后使用CreatedUserId字段执行任何操作