You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET表单提交无法获取FoodSelectedId问题求助

问题排查与解决方案

核心问题是视图表单控件的绑定字段与ViewModel目标字段不匹配,导致提交后无法正确映射FoodSelectedId值,具体修正步骤如下:

1. 修正视图中的Select控件绑定

你的ViewModel中用于接收选中菜品ID的字段是FoodSelectedId,但视图里的select控件绑定的是不存在的FoodId字段,同时还有一个多余的FoodId隐藏输入框,这会导致表单提交时,数据无法映射到FoodSelectedId。

修改视图代码如下:

<form asp-controller="Chef" asp-action="CreateNewChefFood" method="post" enctype="multipart/form-data">
    <input type="hidden" asp-for="ChefId" />
    <!-- 移除多余的 <input type="hidden" asp-for="FoodId" /> -->
    <div class="form-row">
        <div class="col-lg-8">
            <div class="basic-form">
                <div class="form-group">
                    <label asp-for="FoodSelectedId">Select Food from list:</label>
                    <!-- 将asp-for改为FoodSelectedId,无需手动写name属性,asp-for会自动生成正确的name -->
                    <select asp-for="FoodSelectedId" class="form-control">
                        @if (foodList.Any())
                        {
                            @foreach (var item in foodList)
                            {
                                <option value="@item.FoodId"> @item.FoodTitle </option>
                            }
                        }
                    </select>
                    <!-- 修正验证提示的绑定字段 -->
                    <span asp-validation-for="FoodSelectedId"></span>
                </div>
            </div>
        </div>
    </div>
</form>

2. 完善HttpGet方法的ViewModel初始化

当前HttpGet方法没有将传入的id(ChefId)赋值给ViewModel,导致隐藏的ChefId输入框可能没有值,后续业务逻辑也会受影响,需要修正Get方法:

[HttpGet]
[Route("CreateNewChefFood")]
public async Task<IActionResult> CreateNewChefFood(int id)
{
    if (id <= 0) return NotFound();
    await GetAllFoodList();
    await GetAllFoodPriceType();
    // 初始化ViewModel并赋值ChefId
    var viewModel = new CreateChefFoodViewModel { ChefId = id };
    return View(viewModel);
}

3. 验证ModelState错误

如果修正后仍有问题,可以在Post方法中打印ModelState的错误信息,排查是否有其他绑定问题:

[HttpPost]
[Route("CreateNewChefFood")]
public async Task<IActionResult> CreateNewChefFood(CreateChefFoodViewModel createChefFoodViewModel)
{
    // 打印所有ModelState错误,用于排查
    if (!ModelState.IsValid)
    {
        var errors = ModelState.SelectMany(x => x.Value.Errors.Select(e => e.ErrorMessage));
        foreach(var error in errors)
        {
            Console.WriteLine(error);
        }
    }
    // 后续原有逻辑...
}

以上修正完成后,表单提交时选中的菜品ID会正确映射到CreateChefFoodViewModel的FoodSelectedId字段中。

内容的提问来源于stack exchange,提问作者Maryam12 forex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 04:58:22