【问题标题】:asp.net Button event inside jQuery FaceBox [duplicate]jQuery FaceBox中的asp.net按钮事件[重复]
【发布时间】:2010-01-19 14:11:10
【问题描述】:

我正在使用 jQuery FaceBox 来显示一个文本框、一个下拉列表和一个按钮。用户可以在文本框中写一个文本,在 ddl abd 中选择一个值点击按钮。这会触发代码隐藏中的一些代码。 FaceBox 显示很好,里面的内容也还可以。此外,按钮事件被触发。这是按钮事件处理程序的代码:

protected void Button1_Click(object sender, EventArgs e)
    {
        _favorit = new Favoritter();
        ListItem fav = ddl_favoritter.SelectedItem;
        _favorit.FavoritterFolderID = int.Parse(fav.Value);
        //_favorit.FavoritterFolderID = Convert.ToInt32(ddl_favoritter.SelectedItem);
        _favorit.FavoritterNavn = txt_favoritNavn.Text;
        _favorit.FavoritterUserID = UserID;
        _favorit.FavoritterUrl = HttpContext.Current.Request.Url.ToString();
        FavoritterManager.InsertFavoritter(_favorit);
    }

创建了一个业务对象,并使用从控件读取的值设置其属性。然后将该对象插入到数据库中,它工作得很好。问题是文本框和下拉值设置不正确。文本框的值为空,并且 ddl 选择的值始终为 1,即使我在文本框中写入,并在我点击按钮之前选择另一个 ddlitem。 ddl 是这样加载的:

if (!Page.IsPostBack)
            {
                _favoritter = FavoritterFolderManager.GetFavoritterFolderByUser(UserID);
                ddl_favoritter.DataSource = _favoritter;
                ddl_favoritter.DataBind();

            }

我尝试将此代码放在 if (!Page.IsPostBack) 之外,并使用 objectdatasource 填充它,仍然是同样的问题。就像我按下按钮时控件被“重置”一样,我认为它与 FaceBox 没有任何关系,因为它所做的只是显示包含控件的 div ......再说一次,它可能...有什么想法吗?

这是aspx页面中的代码:

<div id="showme" style="display:none;">
                        Add to favourites.<br />
                        <br />
                        <p>
                            Title:&nbsp;<span><asp:TextBox ID="txt_favoritNavn" runat="server"></asp:TextBox></span></p>
                        <p>
                            select folder:&nbsp;<span><asp:DropDownList ID="ddl_favoritter" runat="server" DataTextField="FavoritterFolderNavn"
                                DataValueField="FavoritterFolderID" AppendDataBoundItems="true">
                            </asp:DropDownList>
                            </span>
                        </p>
                        <br />
                        <asp:Button ID="Button1" runat="server" Text="Gem" onclick="Button1_Click"/>
                    </div>

【问题讨论】:

    标签: asp.net jquery facebox


    【解决方案1】:

    您需要填充文本框并选择 if(!IsPostBack) 块内的下拉项的代码,因为页面加载事件在按钮事件之前再次触发(有关更多信息,请参阅ASP.NET Page Life Cycle对此)。您是否尝试过在控件上启用视图状态?这可能是问题的一部分。

    【讨论】:

    • 启用 ViewState 没有任何区别。我尝试将代码从 buttonevent 处理程序移到 if(!IsPostBack) 块中,但结果是一样的。
    • 您是否在文本框上启用了视图状态并自行下拉?
    【解决方案2】:

    改变

    $('body').append($.facebox.settings.faceboxHtml)
    

    $('form').append($.facebox.settings.faceboxHtml)
    

    【讨论】:

      【解决方案3】:

      问题在于这些控件很多,而不仅仅是默认情况下将自己附加到正文的 FaceBox。 jQuery UI 对话框也可以做到这一点。

      请参阅此问题以获得修复:JQuery Facebox Plugin : Get it inside the form tag

      当事情发生在&lt;form&gt; 标记之外时,它们就与 ASP.Net 的工作方式脱节了。当您单击提交时,来自这些输入的值不在表单内,因此没有提交到服务器……这就是您看不到这些值的原因。

      这是该问题的快速答案,感谢Kevin Sheffield

      在 facebox.js 周围一探究竟,我在函数 init(settings) 中遇到了这一行...

      $('body').append($.facebox.settings.faceboxHtml)
      

      我把它改成了...

      $('#aspnetForm').append($.facebox.settings.faceboxHtml)
      

      【讨论】:

      • 好吧,这让我可以读取文本框中的值,但下拉列表在回发时仍会更改为索引 1,即使我在 if (!Page.IsPostBack) 中对其进行数据绑定。另外,如果我写 ex.文本框中的“hhhh”并点击保存按钮,数据库中的值为“,hhhh”。出于某种原因,它在值前面加了一个逗号...
      猜你喜欢
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多