我有一个包含表单的用户控件。在包含用户控件的页面上,当用户按下按钮时,我需要在用户控件中填充表单。
继承人我是怎么做到的,但它不起作用:
用户控制:
public partial class editUC : System.Web.UI.UserControl
{
public DataTable dataTable { set { UpdateForm(value); } }
protected void Page_Load(object sender, EventArgs e) { }
private void UpdateForm(DataTable dt) { txtControl.Text = dt.Rows..... ... }
}
UpdateForm绑定不同的文本框。
单击按钮时包含UC的页面:
EditUserControl.dataTable = dt;
单击按钮,没有任何反应。我在这里缺少什么?
提前致谢。
更新:
我离得更近了。这是因为我正在使用jQuery对话框进行用户控件。如果我删除jQuery,它就可以工作。
这是我创建对话框的方式:
$(document).ready(function() {
var dlg = $('.editFormDialog').dialog({
autoOpen: false,
height: 650,
width: 550,
modal: true,
bgiframe: true,
title: 'Rediger',
open: function(type, data) {
$(this).parent().appendTo("form");
}
});
dlg.parent().appendTo("form");
$('#btnEdit').live('click', function() {
$('.editFormDialog').css('visibility', 'visible');
$('.editFormDialog').dialog('open');
});
});
我将其附加到表单中,但它不起作用。有什么想法吗?
第二次更新:
如果我从页面中删除更新面板,它会起作用。有任何想法吗? : - )
答案 0 :(得分:0)
用户控件并不像这样复杂。它们是一个简单的问题,可以提取一些可重复使用的标记部分,然后可能会添加一些属性,方法和事件。它们并不意味着要进行数据绑定。你真的应该将tihs控件重写为复合服务器控件。
也就是说,你可能通过表现得像是一个真正的服务器控件来获得最大的牵引力。绑定到数据将发生在DataBinding事件中。在这种情况下,您应该设置网格的DataSource属性,然后在网格上调用DataBind。
答案 1 :(得分:0)
你在控件上使用Caching吗?如果使用ASP.NET控件缓存机制缓存控件的内容,则控件的文本将不会发生更改。
您可以在私有void UpdateForm(DataTable dt)中添加断点,以确保在单击按钮时调用此函数吗?
根据用户控件包含的内容,您可能需要执行EditUserControl.DataBind();
如果您发送javascript代码(jquery)作为更新面板异步回发的一部分,请务必记住浏览器不会评估javascript。您需要在异步回发后找到另一种方法来运行该代码。
此外,当您在UpdatePanel控件上执行异步回发时,该控件中的所有DOM元素都会被新元素删除并替换。必须重新创建jQuery元素。