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

Bootstrap 4模态框内Asp.Net表单元素提交不回传问题

问题诊断与解决思路

这个问题其实是ASP.NET表单提交的经典入门坑——你的所有输入控件(包括隐藏域、文本框、文本域)只设置了id属性,却缺少name属性。ASP.NET在处理表单回发时,完全依赖控件的name属性来识别并收集提交的值,没有name的字段根本不会被包含到Request.Form集合里。

解决方案1:给原生HTML控件添加name属性

直接给每个需要提交的输入元素补上name属性(建议和id保持一致,方便对应),修改后的模态框核心代码如下:

<div class="modal-body p-4" id="result">
    <input type="hidden" id="hidmsgreply" name="hidmsgreply" />
    <input type="hidden" id="hiddests" name="hiddests" />
    <input type="hidden" id="hidtemp" name="hidtemp" />
    <div class="row">
        <div class="col-md-2">
            <label for="txtoggetto" class="text-teal-600">Subject</label>
        </div>
        <div class="col-md-10 pb-1">
            <input type="text" id="txtSubj" name="txtSubj" class="form-control">
        </div>
    </div>
    <div class="row">
        <div class="col-md-12 mb-2">
            <textarea id="txtEditor" name="txtEditor"> </textarea>
        </div>
        <div class="col-md-12">
            <span id="spanAutoSave"></span>
        </div>
    </div>
</div>

解决方案2:改用ASP.NET服务器控件(更省心)

如果你用ASP.NET的服务器控件代替原生HTML输入,它会自动生成符合规范的name和id属性,还能直接在后台通过控件ID访问值,不需要手动操作Request.Form:

<div class="modal-body p-4" id="result">
    <asp:HiddenField ID="hidmsgreply" runat="server" />
    <asp:HiddenField ID="hiddests" runat="server" />
    <asp:HiddenField ID="hidtemp" runat="server" />
    <div class="row">
        <div class="col-md-2">
            <label for="txtoggetto" class="text-teal-600">Subject</label>
        </div>
        <div class="col-md-10 pb-1">
            <asp:TextBox ID="txtSubj" runat="server" CssClass="form-control"></asp:TextBox>
        </div>
    </div>
    <div class="row">
        <div class="col-md-12 mb-2">
            <asp:TextBox ID="txtEditor" runat="server" TextMode="MultiLine" CssClass="form-control"></asp:TextBox>
        </div>
        <div class="col-md-12">
            <span id="spanAutoSave"></span>
        </div>
    </div>
</div>

后台代码可以直接写:

string subject = txtSubj.Text;
string content = txtEditor.Text;

为什么提交按钮会出现在AllKeys里?

因为你用的是<asp:Button>服务器控件,ASP.NET会自动给它生成包含命名容器的name属性(比如你看到的ctl00$ContentPlaceHolder1$btnsend),所以提交时这个按钮的信息会被包含到Request.Form中。而原生控件没有name,自然不会被识别。

验证步骤

  1. 按照上面的方法修改控件属性
  2. 重新编译运行页面
  3. 提交表单后查看Request.Form.AllKeys,就能看到你定义的字段名了
  4. 此时Request.Form["txtSubj"]或者服务器控件的Text属性就能正常获取到值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:09:49