在PostBack JavaScript失去其功能

时间:2011-07-19 07:04:06

标签: c# javascript asp.net gridview

我有一个GridView,它的模板列中有一个CheckBox和三个TextBox。 逻辑是,当我检查CheckBox时,应该启用相应的TextBox。如果取消选中CheckBox,则应禁用相应的TextBoxes。我已经为此功能编写了JavaScript。

一切正常,但在该页面中我也有一个DropDownList。当我更改DropDownList值时,页面获得PostBack,那时我丢失了JavaScript功能,即GridView中启用的TextBox被禁用。如何解决这个问题?

5 个答案:

答案 0 :(得分:4)

在更新面板中的每个帖子之后,您需要重新初始化您的javascript ,因为您了解html的结构已更改并且javascript运行在更新面板之后不存在的上一个更新。 Microsoft提供了执行此操作的功能,如下所示。

这是javascript行。

<script type="text/javascript"> 
    var prm = Sys.WebForms.PageRequestManager.getInstance();    
    prm.add_initializeRequest(InitializeRequest);
    prm.add_endRequest(EndRequest);

    function InitializeRequest(sender, args) {      
    }

    function EndRequest(sender, args) {
      // here initialize again your javascript
    }
</script>

答案 1 :(得分:1)

使用ASP Grid的RowCreated事件在复选框中添加客户端功能,这样客户端功能将保留在每个回发

答案 2 :(得分:0)

您必须使用ScriptManager.RegisterStartupScript方法在每个回发时注册您的javascript才能运行它:here's一个示例(针对英文文章编辑,抱歉:p)。

答案 3 :(得分:-1)

使用自动回发复选框可以从服务器端代码启用禁用文本框。这将更新视图状态,因此将在选择更改时进行维护。在UpdatePanel中使用这些用于ajax。或者,您也可以将下拉列表添加到updatepanel中,以便选择更改不会影响其他页面元素。

答案 4 :(得分:-1)

JavaScript正在开发DOM。当页面从ViewState获取PostBack值时会写入DOM并覆盖您的JavaScript更改。你应该以持久的方式存储复选框的状态,即。 jQuery data()或hiddenfield以及在PostBack将更改写回DOM之后。