Razor 将不属于模型的额外参数传递到控制器中

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

下面的代码显示了我的createcshtml页面和连接到该页面的控制器

它工作正常,但是现在我需要在表单中添加另一个不在GameManagement.Game模型中的字段

此字段称为“CreatorUserId”,在我使用的模型中不存在

但是我应该得到这个字段的值,然后当它不是模型的一部分时将它传递给控制器吗

谢谢

Create.cshtml:

@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字段执行任何操作