在引导模式中时,asp.net 表单字段返回空

Posted

技术标签:

【中文标题】在引导模式中时,asp.net 表单字段返回空【英文标题】:asp.net form fields return empty when in a bootstrap modal 【发布时间】:2014-05-08 22:21:13 【问题描述】:

我正在尝试在引导模式中提交一个 asp.net 表单。出于某种原因,所有字段都返回空(如果我尝试使用模态之外的字段,它会很好用)。我看过一些关于它的帖子,但没有一个解决方案解决了我的问题。

<div class="modal fade" id="myModalForm" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true" data-backdrop="static">
    <div class="modal-dialog">
      <div class="modal-content">
        <div class="modal-header">
          <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
          <h4 class="modal-title" id="myModalLabel">EDIT ADVERTISMENT</h4>
        </div>
        <div class="modal-body">

        <form id="updateadform" method="post" action="#" class="basic-form" >
          <label for="title">Ad Name</label>
            <asp:TextBox ID="modaltbadname" runat="server" placeholder="Ad Name"></asp:TextBox>
            <label for="title">Promotional Text</label>
            <asp:TextBox id="modaltbtbpromotional" TextMode="multiline"  Rows="3" runat="server" />
          <label for="description">Page</label>
            <asp:DropDownList ID="modalddpage" placeholder="Insert the page the ad refers to" runat="server"></asp:DropDownList>
          <label for="finish-date">Start Date</label>
            <asp:TextBox ID="modaltbstartdate" runat="server" placeholder="20/01/2014" CssClass="datepicker" onchange="Page_ClientValidate();"></asp:TextBox>
          <label for="finish-date">End Date</label>
            <asp:TextBox ID="modaltbenddate" runat="server" placeholder="20/01/2014" CssClass="datepicker" onchange="Page_ClientValidate();"></asp:TextBox>
               <asp:CompareValidator id="CompareValidator1" runat="server" ControlToCompare="modaltbstartdate" cultureinvariantvalues="true" display="Dynamic" enableclientscript="true"  ControlToValidate="modaltbenddate" ErrorMessage="Start date must be earlier than finish date" type="Date" setfocusonerror="true" Operator="GreaterThanEqual" text="Start date must be earlier than finish date"></asp:CompareValidator>

          <div class="right-side">
          </div>

          <div class="clearfix"></div>

        </form>

        </div>
        <div class="modal-footer">
          <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
          <asp:Button type="button" ID="savead"   CssClass="btn btn-primary" runat="server" Text="Save Changes" OnClick="savead_Click" OnClientClick="savevariables()" UseSubmitBehavior="false" />
        </div>
      </div>
    </div>
  </div>

后面的代码:

protected void savead_Click(object sender, EventArgs e)

    string x = idtoupdate.Value; // this field is outside of the modal - returns its correct value
    string y = modaltbadname.Text; //returns ""

    DB.UpdateAd(modaltbadname.Text, modaltbtbpromotional.Text, modalddpage.SelectedValue, modaltbstartdate.Text, modaltbenddate.Text, int.Parse(idtoupdate.Value));

【问题讨论】:

【参考方案1】:

模态不会影响发送到服务器的值。但是,您在模态中手动指定 &lt;form&gt; 标记。我假设在您发布的标记上方或母版页中的某个地方有一个&lt;form runat="server"&gt;,而您可能所做的是不小心将表单嵌套在表单中。

删除模态框内的表单标签,值应正确保存。

在 cmets 之后编辑:

确保与初始 &lt;form runat="server&gt; 标记匹配的结束 &lt;/form&gt; 标记在附加后包围模式。

其他潜在原因:

Page_Load 事件后面的代码不会设置 modaltbadname.Text 属性,除非它像这样包装:

if(!Page.IsPostBack)

     modaltbadname.Text = "value";

检查OnClientClick="savevariables()"函数在提交到服务器之前不会更改值。

【讨论】:

感谢您的回答!你对我的
是正确的,但我认为问题是模式被附加到正文中,这意味着它不在我的 ASP 表单中,这就是为什么没有捕获这些值.尝试删除表单,但没有成功。
再次感谢!我尝试添加 isPostback 但在调试时它没有到达那里。另外 - OnClientClick 函数是一个测试函数,用于查看我是否在客户端获取这些变量,并且没有删除它们。反正我删了还是不行:( 抱歉,如果不清楚 - IsPostBack 建议只是为了确保您没有更改页面加载的值,因为在 asp.net webforms 页面生命周期中,您的页面加载事件在您点击之前命中事件,因此有时您可能会意外地覆盖值(但似乎并非如此)。我想不出任何其他原因 - 我的猜测是它仍然与未嵌套在表单中的文本框有关。如果您使用 chrome 浏览器开发工具或触发错误,您可以检查发送到服务器的表单值(按 f12 并查看网络选项卡) 我很确定你是对的,这就是问题所在。模态 div 在表单之后而不是在其中。我试过 $('#myModalForm').appendTo('#form1');在我的 document.ready 函数上,但它似乎不起作用。知道我做错了什么吗?再次 - 非常感谢您的帮助! 在表单中移动模态的修复在这里***.com/questions/19184002/…【参考方案2】:

将所有多余的 &lt;form class="form-horizontal"&gt; 标签替换为 &lt;div class="form-horizontal"&gt; 对我有帮助。

【讨论】:

以上是关于在引导模式中时,asp.net 表单字段返回空的主要内容,如果未能解决你的问题,请参考以下文章

通过引导模式对话框结果重定向浏览器的 ASP.Net MVC 文件上传

ASP.NET MVC 验证不适用于引导模式

引导模式不起作用。(Asp.net,C#)

将 ASP.NET 文本框扩展到行宽 - 引导 css

在 ASP.NET MVC5 中传递给控制器​​时,DateTime 字段为空

asp.net 微信企业号办公系统-表单设计-子表