4

我正在使用 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>
4

3 回答 3

1

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

于 2010-01-19T14:16:21.623 回答
1

改变

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

$('form').append($.facebox.settings.faceboxHtml)
于 2011-09-20T06:48:41.963 回答
0

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

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

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

这是该问题的快速答案,归功于凯文谢菲尔德

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

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

我把它改成...

$('#aspnetForm').append($.facebox.settings.faceboxHtml)
于 2010-01-19T22:29:49.790 回答