在.NET 4 Razor Pages中如何用单个按钮提交单选按钮值与查询
问题描述
在.NET 4的Razor Pages应用中,现有一个通过按钮触发的数据库查询(对应代码上部的下拉选单和"View result"按钮),希望将下方的单选按钮组的值与其一同提交,且尽量只用一个按钮。请问是否可行?能否通过ViewBag实现?该如何操作?
现有代码
<form method="post" id="queryForm" asp-controller="HomeController"> <div class="input-group"> <select id="sqlQuerriesDropDown" class="form-select" name="selectedQuery"> @foreach (var SqlQuery in ViewBag.SqlQuerriesDropDown) { <option value="@SqlQuery.getQueryName()">@SqlQuery.getQueryName()</option> } </select> <p> </p> <!-- Schaltfläche Anzeigen --> <input type="submit" class="btn btn-primary" value="View result"/> <p> </p> </div> <div> <br /> <label><b>Decimal separator</b></label><br /> <label><input class="boost_radio" onclick="boostNo(1)" asp-for="Boost_No.Number" type="radio" name="mySeperator" value=0 checked="checked" /> Comma</label><br /> <label><input class="boost_radio" onclick="boostNo(2)" asp-for="Boost_No.Number" type="radio" name="mySeperator" value=1 /> Point</label><br /> <span asp-validation-for="Boost_No.Number"></span><br /> <input type="submit" value="submit" name="myDelimitter" id="submit" /> </div> </form>
解决方案
完全可行,不需要用ViewBag实现表单提交传值——ViewBag仅用于后端向前端视图传递渲染数据(比如你用来填充下拉选单的ViewBag.SqlQuerriesDropDown),表单提交是前端向后端传值,直接通过表单元素的name属性绑定即可。具体操作步骤如下:
- 移除多余提交按钮:删除代码中第二个
<input type="submit" value="submit" name="myDelimitter" id="submit" />,只保留"View result"按钮作为唯一提交触发点。 - 修正单选按钮冗余属性:去掉单选按钮上无效的
ViewBag.RB="0"属性,同时修正拼写错误的onklick为onclick(如果该前端函数非必需也可直接移除)。 - 控制器接收参数:在
HomeController对应的Post方法中,添加与表单元素name匹配的参数,即可同时接收下拉选单和单选按钮的值:[HttpPost] public ActionResult Index(string selectedQuery, int mySeperator) { // 执行数据库查询逻辑,同时使用mySeperator处理小数分隔符需求 // 示例:根据mySeperator的值(0=逗号/1=点)格式化查询结果 // ... return View(); }
补充说明
你的单选按钮已经设置了统一的name="mySeperator",这是表单提交传值的关键——同一组单选按钮必须共享相同的name,这样选中的值才会被正确传递到后端。而asp-for="Boost_No.Number"如果是绑定模型属性,也可以直接通过模型接收参数,效果和直接用参数接收一致。
内容的提问来源于stack exchange,提问作者Michael 7
相关产品推荐
相关产品推荐

