11

发生了一些奇怪的事情,我正在转换一个使用 javascript 在小窗口中打开另一个网页以进行数据输入的应用程序,以使用 ModalPopupExtender。

它似乎工作正常,但在 OK 事件中,当我执行 txtData.Text (我的模式弹出窗口中的文本框)时,它会在数据之前返回一个逗号,所以如果你输入“Rabbit”,它会返回为“ ,兔子”。

此外,当我多次使用它时,在另一个我可能会单击显示它的地方,然后键入“Fish”,它会开始返回诸如“,Rabbit,,Fish”之类的内容

我不知道为什么或如何阻止它这样做......有什么想法吗?

4

15 回答 15

4

同样在这里。不知道为什么会发生。面板中的按钮启动的每个回发都会将逗号和以前的值添加到所有文本字段。

挂钩 TextBox.Text 设置器显示损坏的数据来自 postdata 集合。所以这意味着就在回发之前 ModalPopupExtender 破坏了数据。

PS我没有使用UpdatePanel,而是常规面板,所以没有与按钮相关的触发器。

更新:找到解决方案。

当回滚到 5 月发布的 AjaxToolKit ( http://ajaxcontroltoolkit.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=27326 ) 时,问题似乎消失了。

于 2009-11-18T03:44:58.947 回答
4

只是在这个问题上与大家分享这个解决方案。尽量不要使用asp控件,而是使用html。

*<input type="text" id="txtID" runat="server" class="myClass" />*

这对我来说很好。

谢谢,

于 2013-04-30T10:27:51.590 回答
3

我还发现一个论坛表明,当表单上有多个同名控件时,它可能是标准的 html 行为。记住这一点(并假设 ajax 控件中存在错误)我围绕它编码的方式是在我的 Page_Load 中为我的每个文本框添加以下类型的语句。

string[] vals = txtValue.Text.Split(Convert.ToChar(",")); txtValue.Text = vals[vals.Length - 1];//看来我的最新值总是在最后一项

由于表单加载发生在按钮事件之前,我在它们到达处理其值的事件之前整理了我的字段。

于 2010-07-01T06:14:25.097 回答
3

我有一个类似的问题,在 UpdatePanel 中有一个 jQuery 对话框。正如我在不同网站上看到的那样,问题是由 DOM 树内的重复引起的。

最后我找到了一个非常简单的解决方案。我将对话框分配给 div,然后通过 JavaScript 打开或关闭它,然后运行这个小小的代码来删除重复项:

var count = $(".dialog").length;
for (i = 1; i < count; i++) {
    $(".dialog").first().remove();
}

编辑:事实证明并不是那么简单。最后,我的代码如下所示:

在文档就绪(以及异步页面调用)中:

function AddDialog() {

    var dlg = $(".dialog").dialog({ autoOpen: false });
    dlg.parent().appendTo($("form:first"));

    var targetSelector = ".myDialog"; // watch out: can't use ID here!

    if (mustOpenDialog) {

        $(targetSelector).last().remove();  //-- remove last copy

        var dlg = $(targetSelector).dialog({ autoOpen: true });

        var count = $(targetSelector).length;
        for (i = 1; i < count; i++) {
            $(targetSelector).last().remove();
        }
    }

    if (mustCloseDialog) {

        $(targetSelector).dialog("close");
        var count = $(targetSelector).length;
        for (i = 1; i < count; i++) {
            $(targetSelector).first().remove();
        }
    }

}

在我的完整代码中,mustOpenDialog 和 mustCloseDialog 是在代码隐藏中设置的。

于 2011-01-14T17:58:51.933 回答
2

我以前的值返回逗号分隔时遇到了同样的问题。似乎我的确定按钮位于更新面板内,并且我也将它放在触发器部分中。从更新面板的触发器部分删除按钮解决了这个问题。

最好的问候 - 托比亚斯

于 2009-10-29T22:41:22.607 回答
2

我的回答与 Smarty 的类似。我的页面看起来像这样......

<UpdatePanel>
    <GridView>
        <Button> <-- These buttons fire modal popup programmatically.
        <Button>
        <Button>
    </GridView>
    <ModalPopup>
    <HiddenField> <-- Dummy target of modal popup.
</UpdatePanel>

解决方法是将其更改为...

<UpdatePanel>
    <GridView>
        <Button> <-- These buttons fire modal popup programmatically.
        <Button>
        <Button>
    </GridView>
</UpdatePanel>
<ModalPopup>
<HiddenField> <-- Dummy target of modal popup.

我必须在 gridview rowdatabound 事件上使用 scriptmanager 将每个按钮注册为回发控件。不利的一面是我有更多完整的回发。但是,它解决了问题。

于 2010-09-14T01:26:14.947 回答
2

这是很晚的回复,但我在这里记录下来,以便其他人受益。我的情景

单击按钮时在 jquery 对话框中打开用户控件。这个用户控件里面有更新面板和几个文本框。第一次打开对话框,它就像魅力一样。在随后单击打开对话框时,我注意到一个奇怪的行为。我在用户控件(在更新面板内)中有几个文本框。在任何部分回发中,文本框的文本更改为current text, current text. 如果 textbox 的值为fish,则在任何部分回发时,它都会更改为fish, fish.

原因是我使用 jquery 打开对话框。我还附加了对话框以在单击按钮时形成。

 dlg.parent().appendTo($('form:first'));

因此,在后续单击附加到 DOM 的多个用户控件时,因此在构建回发数据时,存在多个具有相同 ID 的控件,因此存在使用“,” - 逗号附加的值。

所以我的解决方案很简单,在关闭对话框时,我只是将它从 DOM 中删除

我从以下链接得到提示。在此处发布以供将来参考

于 2012-03-14T08:33:19.477 回答
1

出于某种原因,如果文本框设置为只读,它似乎不会发生。

我认为可以通过向用户显示一个可编辑的文本框,捕捉到它的击键,并更新一个对用户隐藏的只读文本框来解决问题。

仍然有点混乱,但我不能回滚到 May 的版本,因为在那个版本中我需要避免 ComboBox 的另一个错误!


更新:

作为背景知识,我的模式弹出窗口中有一个用户控件(ascx),因为我需要重用它。ascx 必须自己处理用户的输入(包含页面不知道控件内部发生了什么),因此当用户单击按钮时,我会执行回调并处理数据。如果成功的结果返回给客户端回调函数,那么我模拟单击包含页面认为的“确定”按钮,该按钮实际上对用户是不可见的。

我已经更改了我的代码以添加一个隐藏的只读文本框,并在每次文本更改时将文本从原始文本框中复制到新文本框中。

    <asp:TextBox runat="server" ID="txtName"></asp:TextBox>

变成

    <asp:TextBox runat="server" ID="txtName" onchange="document.getElementById(this.id + 'RO').value = this.value"></asp:TextBox>
    <asp:TextBox runat="server" ID="txtNameRO" ReadOnly="true" style="display:none;"></asp:TextBox>

然后在回调中传回值而不是获取 txtName 的值时,我使用 txtNameRO。

如果您要进行回发,我认为这不会有帮助,但是您可以像我一样在回发之前添加一个回调。希望这无论如何都会对某人有所帮助!

于 2009-11-24T11:00:50.123 回答
0

根据 Jen 的回复,我已经成功实施了一个完整的 hack。我使用一个 asp:HiddenField 来保存我想要回传的值,并用一个纯 HTML 输入框填充它

<asp:HiddenField ID="txt" runat="server"/>
<input type="text" onchange='document.getElementById("<%= txt.ClientID %>").value = this.value;' />

这比 Jen 的解决方案更轻,因为您仍然只回发一个服务器控件。

顺便说一句,这是 Ajax Toolkit 中的一个非常重要的错误。你可以在这里投票和评论:

CodePlex 问题

假装你在芝加哥。尽早投票,经常投票。

于 2010-02-25T21:48:34.833 回答
0

对我来说,解决方案是将模态弹出窗口从主更新面板中取出。一旦我这样做了,逗号就消失了。如果您确实需要在模态弹出窗口内创建一个更新面板,请在该面板内创建一个自己的更新面板。
我不需要回滚到工具包的先前版本。

于 2010-03-17T21:25:33.627 回答
0

我已经尝试解决这个问题一天了,我办公室里一些非常有帮助的人想出了一个了不起的解决方案!

我们将 ModalPopUpExtender 和随后由扩展器控制的弹出面板移到页面上最外面的 UpdatePanel 之外,创建了一个假按钮并将假按钮的 ID 提供给 ModalPopUpExtender 的 TargetControlID 属性。

<asp:Button runat="server" ID="dummyButton" CausesValidation="false" Style="display: none" />

<cc1:ModalPopupExtender ID="ModalPopupExtender1" runat="server" TargetControlID="dummyButton" CancelControlID="CancelPopUp" PopupControlID="PanelID" BackgroundCssClass="modalBackground" />

在我曾经使用 PopUp 扩展器和面板的表单/页面中,我在用于触发 ModalPopUpExtender 的按钮上创建了一个 OnClick 事件。

<asp:ImageButton ID="ButtonID" runat="server" Text="Add" ImageUrl="~/Images/Add-32-1-small.png" OnClick="LoadPopUp" />

在触发 ModalPopUpExtender 的按钮上,我创建了一个名为“LoadPopUp”的 OnClick 事件 - 在 LoadPopUp 后面的代码中,我只是将 ModalPopUpExtender1.Show();

protected void LoadPopUp(object sender, EventArgs e)
{
  ModalPopupExtender1.Show();
}
于 2010-04-29T15:45:06.953 回答
0

我遇到了同样的问题,只是我没有使用 AjaxControlToolkit 或更新面板。<form>通过将标记从 ASP.net 母版页移动到文本框所在的页面,我的问题得到了解决。可以帮助某人。

于 2014-02-23T14:46:51.260 回答
0

有同样的问题,我在这里找到了解决方案:http : //ajaxcontroltoolkit.codeplex.com/workitem/26259

问题是 ajax 最新版本,只需安装 2009 年 ajax 版本和 modalpopup 即可与您的实际代码一起正常工作。

Tuve el mismo problema y encontré la solución en el link que indico arriba。El questiona viene con las versiones recientes de ajax, simplemente instala la version del año 2009 y el modalpopup funcionará bien con tu código actual。

于 2014-03-13T13:34:50.007 回答
0

解决方案是从主更新面板中获取模式弹出窗口。一旦这样做,逗号就会消失。如果您确实需要在模态弹出窗口内创建一个更新面板,请在该面板内创建一个自己的更新面板。

于 2014-04-25T06:38:59.990 回答
0

我遇到了这个问题并在上面浪费了很多时间,发现这是由隐藏的额外标签引起的,我在更改标记时忘记删除该标签。

确保 .aspx 页面上的所有标记都正确排列。

<div>
   **Lots of code here**
   </div> <-- That guy owes me a vacation!
</div>
于 2018-07-26T15:56:53.083 回答