簡體   English   中英

ASP.NET TextBox忽略更新面板

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM