[英]ASP.NET TextBox ignores update panel
我有一個GridView,其項目模板定義如下:
public class ToolLogTemplate : ITemplate
{
public String DataField { get; set; }
public ToolLogTemplate(String column)
{
DataField = column;
}
public void InstantiateIn(Control container)
{
var textBox = new TextBox();
textBox.ClientIDMode = ClientIDMode.Predictable;
textBox.CssClass = "ToolLog";
textBox.AutoPostBack = true;
textBox.DataBinding += textBox_DataBinding;
container.Controls.Add(textBox);
}
void textBox_DataBinding(object sender, EventArgs e)
{
var textBox = (TextBox)sender;
var context = DataBinder.GetDataItem(textBox.NamingContainer);
textBox.Text = DataBinder.Eval(context, DataField).ToString();
}
}
GridView在UpdatePanel的內部定義,如下所示:
UpdatePanel updatePanel = new UpdatePanel();
updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
GridView中TextBoxes的TextChanged事件觸發頁面的完全刷新。 我的理解是,通過將TextBoxes包裝在UpdatePanel中,它將觸發部分刷新。 我誤會嗎?
更新以回答關於該問題的最新評論:
我在文本框中附加了一些JavaScript:
currentTextBox.Attributes.Add("onFocus", String.Format("document.getElementById('RowTextBox').value = {0}; document.getElementById('ColTextBox').value = {1}; this.style.backgroundColor='#ffeb9c';", i, j));
currentTextBox.Attributes.Add("onBlur", "this.style.backgroundColor='#ffffff'");
它只是設置文本框的顏色,然后將其保存在gridview中。 updatepanel可以按預期使用我具有的菜單和按鈕,只是導致完整回發的文本框。
看到更新代碼后,我修改了答案...
需要告知UpdatePanel它應該響應哪些控件。 您可以通過添加觸發器來做到這一點。 就您而言,您在GridView中具有TextBox控件。 這些文本框設置為自動回發。 由於它們位於GridView中,因此我相信GridView會將它們像RowCommand一樣對待。 建議您使用原始代碼,添加以下內容:
UpdatePanel updatePanel = new UpdatePanel();
updatePanel.UpdateMode = UpdatePanelUpdateMode.Conditional;
gridView.OnRowCommand = "GridViewRowCommand";
AsyncPostbackTrigger newTrigger = new AsyncPostbackTrigger();
newTrigger.ControlID = gridView.ControlID;
updatePanel.Triggers.Add(newTrigger);
在您的后台代碼中,您需要執行以下操作:
protected void GridViewRowCommand(object sender, RowCommandEventArgs e)
{
var myTextBox = e.Row.FindControl("myTextBoxID");
// Do some work
}
不幸的是,我無法使這里描述的模型正常工作。 相反,我在updatepanel內放置了一個不可見的按鈕,並讓javascript在文本框onchange事件上單擊它。 我不知道為什么這種方法有效,而TextChanged卻無效,但這就是它最終失敗的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.