如何将下拉列表选中项传递给控制器Upload方法的字符串参数
问题根因
表单提交时只会携带设置了name属性的表单元素值,你当前代码里的<select>下拉标签没有配置name属性,且属性名没有和后端方法的selectedItem参数匹配,所以后端无法接收到下拉框选中值。
修复步骤
- 给
<select>标签添加name="selectedItem"属性,属性值必须和后端字符串参数名完全一致,模型绑定才能正常匹配赋值。 - 给默认提示选项
<option>设置空value,避免用户未选择时直接把提示文本"Choose a Database"作为有效值传入后端。
修改后的表单下拉部分代码如下:
<div class="form-group"> <select class="form-control-sm" name="selectedItem"> <option value="" selected>Choose a Database</option> <option value="SICS">SICS</option> <option value="TranslationTable">Translation Table</option> </select> </div>
其余表单代码不需要改动,提交表单时下拉框选中的value就会自动绑定到后端Upload方法的selectedItem参数上。
可选补充校验
如果提交时出现400错误,是因为你配置了[ValidateAntiForgeryToken]防伪验证,只需要在<form>标签内部任意位置添加防伪令牌即可:
@Html.AntiForgeryToken()
同时建议后端增加参数合法性校验,避免无效请求:
[HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Upload(IFormFile DBTemplate, string selectedItem) { if (string.IsNullOrWhiteSpace(selectedItem)) { ModelState.AddModelError(string.Empty, "请先选择对应的数据库类型"); // 替换为你的视图返回逻辑 return View(); } if (DBTemplate == null || DBTemplate.Length == 0) { ModelState.AddModelError(string.Empty, "请选择要上传的xls/xlsx格式Excel文件"); return View(); } // 后续业务处理逻辑 }
内容的提问来源于stack exchange,提问作者Veck
相关产品推荐
相关产品推荐

