代码之家  ›  专栏  ›  技术社区  ›  SkyeBoniwell

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

  •  0
  • SkyeBoniwell  · 技术社区  · 5 年前

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

    这个字段名为“CreatorUserId”,在我使用的模型中不存在。

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

    谢谢!

    创建.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>
    

    控制器:

    [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);
    }
    
    0 回复  |  直到 5 年前
        1
  •  1
  •   Nan Yu    5 年前

    作为@约翰鲁克·劳伊建议,最好的解决方案是创建一个新的视图模型来包含所需的属性。

    如果坚持不创建新的viewmodel,解决方法可以是添加名称属性:

    <input id="CreatorUserId" name="CreatorUserId" />
    

    并在服务器端获得价值,如:

    public async Task<IActionResult> Create([Bind("Id,Description,DisplayName")] Game newGame, string CreatorUserId)
    {
    }