在引导模式中时,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">×</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】:模态不会影响发送到服务器的值。但是,您在模态中手动指定 <form>
标记。我假设在您发布的标记上方或母版页中的某个地方有一个<form runat="server">
,而您可能所做的是不小心将表单嵌套在表单中。
删除模态框内的表单标签,值应正确保存。
在 cmets 之后编辑:
确保与初始 <form runat="server>
标记匹配的结束 </form>
标记在附加后包围模式。
其他潜在原因:
Page_Load 事件后面的代码不会设置 modaltbadname.Text
属性,除非它像这样包装:
if(!Page.IsPostBack)
modaltbadname.Text = "value";
检查OnClientClick="savevariables()"
函数在提交到服务器之前不会更改值。
【讨论】:
感谢您的回答!你对我的 再次感谢!我尝试添加 isPostback 但在调试时它没有到达那里。另外 - OnClientClick 函数是一个测试函数,用于查看我是否在客户端获取这些变量,并且没有删除它们。反正我删了还是不行:( 抱歉,如果不清楚 - IsPostBack 建议只是为了确保您没有更改页面加载的值,因为在 asp.net webforms 页面生命周期中,您的页面加载事件在您点击之前命中事件,因此有时您可能会意外地覆盖值(但似乎并非如此)。我想不出任何其他原因 - 我的猜测是它仍然与未嵌套在表单中的文本框有关。如果您使用 chrome 浏览器开发工具或触发错误,您可以检查发送到服务器的表单值(按 f12 并查看网络选项卡) 我很确定你是对的,这就是问题所在。模态 div 在表单之后而不是在其中。我试过 $('#myModalForm').appendTo('#form1');在我的 document.ready 函数上,但它似乎不起作用。知道我做错了什么吗?再次 - 非常感谢您的帮助! 在表单中移动模态的修复在这里***.com/questions/19184002/…【参考方案2】:将所有多余的 <form class="form-horizontal">
标签替换为 <div class="form-horizontal">
对我有帮助。
【讨论】:
以上是关于在引导模式中时,asp.net 表单字段返回空的主要内容,如果未能解决你的问题,请参考以下文章
通过引导模式对话框结果重定向浏览器的 ASP.Net MVC 文件上传