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

ASP.NET MVC Razor视图下拉框提交后保持选中状态问题求助

问题解决步骤

1. 修正表单参数名不匹配问题

视图里<select>的name属性要和POST方法的参数名一致,否则提交后无法正确传递选中的餐桌值:

<select name="tafel" class="form-control">
    <!-- option代码后续调整 -->
</select>

2. 修复RedirectToAction参数传递错误

POST方法里的RedirectToAction参数传递逻辑有误,需要用匿名对象明确指定路由参数:

[HttpPost]
public IActionResult RekeningLaden(string tafel)
{
    return RedirectToAction(nameof(Rekeningen), new { geselecteerdeTafel = tafel });
}

3. 解决RZ1031错误与选中状态不生效问题

提供两种可行方案:

方案一:使用Html.DropDownList辅助方法(推荐)

替代手动foreach生成option,通过辅助方法自动绑定枚举并设置选中值,完美规避标签助手冲突:

<form asp-action="RekeningLaden" method="post">
    @Html.DropDownList("tafel", 
        new SelectList(ViewBag.Tafels, ViewBag.geselecteerdeTafel),
        new { @class = "form-control" })
    <input type="submit" value="Rekening toevoegen" />
</form>
  • SelectList第二个参数直接传入ViewBag.geselecteerdeTafel,自动设置默认选中项
  • 第一个参数"tafel"对应表单提交的参数名,和POST方法参数保持一致

方案二:局部禁用option标签助手

如果坚持手动生成option,可在单个option标签上添加asp-disable-taghelper属性,仅禁用当前标签的标签助手,不影响页面其他asp功能:

<form asp-action="RekeningLaden" method="post">
    <select name="tafel" class="form-control">
        @foreach (var tafel in ViewBag.Tafels)
        {
            <option value="@tafel" 
                    asp-disable-taghelper="true"
                    @(tafel.ToString() == ViewBag.geselecteerdeTafel ? "selected" : "")>
                @tafel
            </option>
        }
    </select>
    <input type="submit" value="Rekening toevoegen" />
</form>

内容的提问来源于stack exchange,提问作者Dominic smet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 12:33:33