ASP.Net如何执行动态JavaScript并阻止回发

时间:2011-11-06 10:12:31

标签: c# javascript asp.net

我有ASP按钮和2个标签。

<asp:Button runat="server" ID="btnHide" />
<asp:Label runat="server" ID="lblName"></asp:Label>
<asp:Label runat="server" ID="lblPosition"></asp:Label>

我创建了一个动态JS脚本。

string jsbtnHide = @"document.getElementByID('" + lblName.ClientID + @"').value = '';
document.getElementByID('" + lblPosition.ClientID + @"').style.display = 'none';";

我将脚本分配给按钮。我试过“OnClick”和“OnClientClick”。

btnHide.Attributes.Add("OnClick", jsbtnHide);

但是我无法让脚本成功执行并且没有回发。 我试过添加OnClientClick =“return false;”动态和ascx文件。动态似乎被忽略了,尽管它在FireBug中看起来是正确的。 OnClick似乎没有阻止回发。 当脚本运行时,lblName不会更改为'',没有一次运行。

我做错了什么?我已经好几天了:(

2 个答案:

答案 0 :(得分:1)

你可以使用一个好方法 只需将您的点击代码更改为此

即可
string jsbtnHide = @"document.getElementByID('" + lblName.ClientID + @"').value = '';
document.getElementByID('" + lblPosition.ClientID + @"').style.display = 'none';return;";

添加返回代码末尾,防止调用回发事件

答案 1 :(得分:0)

尝试包装要在JS函数中执行的JS代码,然后使用该函数连接该按钮,并返回另一个返回false的语句。

这样的事情:

public string DynamicJSCode; //Page level

//Page_Load

    DynamicJSCode = @"function doSomeWork(){document.getElementById('" + lblName.ClientID + @"').innerText= '';
    document.getElementById('" + lblPosition.ClientID + @"').style.display = 'none'; return false;}";

然后,您可以使用属性(或任何其他方法)将上面的JS嵌入到您的页面中。

<script type='text/javascript' language='javascript'>
<%= DynamicJSCode %>
</script>

然后将功能连接到按钮,如下所示:

btnHide.Attributes.Add("onclick", "return doSomeWork();");

为防止按钮控件不回发,您必须使用return;电话(毫无疑问)。

这可以稍微维护一下(根据我的理解),然后你也不需要在后面的代码中添加额外的按钮事件处理程序附件。 在标记本身中,您可以将JS函数调用分配给OnClientClick事件,并且始终动态生成执行的代码。

<asp:Button runat="server" ID="btnHide" OnClientClick='doSomeWork();return false;' />

始终建议编写具有更好可维护性的代码,而不管功能的大小或重要性。

希望它有所帮助!