ASP.NET Core Razor Pages:提交表单时Hidden字段值无法传递求助
问题:Razor Pages中DevExpress SelectBox值无法传递到Post处理方法
我是Razor Pages新手,现在做表单提交到OnPostHandler,表单里有DevExpress SelectBox和hidden输入框,监听SelectBox选择事件更新hidden字段,但提交后发现BatchType的值是null,怎么把这个值传到处理方法里?
现有代码
.cshtml
@model SearchViewModel <form asp-page-handler="TransactionsByAllSearch" method="post"> <div class="myBox"> <div class="inline-block"> <div style="font-size: 15px;">Query Type</div> <div> @(Html.DevExtreme().SelectBox() .ID("querytypes") .ValueExpr("QueryType") .DisplayExpr("Description") .DataSource(Model.QueryTypes) .Width("300px") .DeferRendering(false) .DataSource(@Model.QueryTypes) .OnSelectionChanged("queryTypeSelectionChanged") ) </div> <div> <input type="hidden" name="BatchType" value=""/> </div> </div> </div> <div> @(Html.DevExtreme().Button().ID("getData").Text("Get Data").UseSubmitBehavior(true).Type(ButtonType.Success).Width(200)) </div> </form> <script> function queryTypeSelectionChanged(e){ var batchType = $("#querytypes").dxSelectBox('instance').option('value'); $('#BatchType').val(batchType); } </script>
.cshtml.cs
[BindProperty] public SearchParameter ParameterModel { get; set; } public async Task<PageResult> OnPostTransactionsByAllSearch() { //do something with the ParameterModel }
SearchParameter.cs
public class SearchParameter { public string BatchType{get;set;} }
解决方案
方法1:修正hidden字段的Name属性
当前hidden字段name="BatchType",但后台绑定的是ParameterModel.BatchType,Razor Pages模型绑定要求字段名与属性路径完全对应。直接修改hidden的name并补充id:
<input type="hidden" id="BatchType" name="ParameterModel.BatchType" value=""/>
方法2:简化JS逻辑(可选优化)
不用重复获取SelectBox实例,OnSelectionChanged的e参数已包含选中值,直接使用即可:
function queryTypeSelectionChanged(e){ $('#BatchType').val(e.value); }
方法3:直接给SelectBox绑定模型(更简洁,推荐)
没必要借助hidden字段,直接给DevExpress SelectBox设置Name属性,让它直接绑定到ParameterModel.BatchType,表单提交时自动完成传值:
@(Html.DevExtreme().SelectBox() .ID("querytypes") .Name("ParameterModel.BatchType") // 关键:添加该属性 .ValueExpr("QueryType") .DisplayExpr("Description") .DataSource(Model.QueryTypes) .Width("300px") .DeferRendering(false) )
此方法可直接删除hidden字段和对应的JS监听函数,由DevExpress自动处理参数传递。
内容的提问来源于stack exchange,提问作者SoftwareDveloper
相关产品推荐
相关产品推荐

