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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 13:20:35