我正在使用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: <span><asp:TextBox ID="txt_favoritNavn" runat="server"></asp:TextBox></span></p>
<p>
select folder: <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>
答案 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)