jQuery FaceBox中的asp.net Button事件

时间:2010-01-19 14:11:10

标签: asp.net jquery facebox

我正在使用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选择的值为allways 1,即使我在文本框中写入,并在按下按钮之前选择另一个ddlitem。 ddl加载如下:

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

            }

我尝试将此代码置于外(如果(!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>

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

更改

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

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

答案 2 :(得分:0)

问题是很多这些控件,不仅仅是FaceBox默认将它们附加到正文。 jQuery UI对话框也是这样做的。

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

当事件发生在<form>标记之外时,它们与ASP.Net的工作方式断开连接。当您单击提交时,这些输入中的值不在表单内部,因此未提交给服务器...这就是您没有看到值的原因。

这是该问题的快速回答,归功于Kevin Sheffield

在facebox.js周围戳我在函数init(设置)中遇到了这一行......

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

我将其改为......

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

答案 3 :(得分:0)

我在这个帖子中找到了答案:

Facebox adding commas to input

谢谢大家,谢谢Nick Craver的帮助