繁体   English   中英

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

[英]ASP.Net How do I execute a dynamic JavaScript and prevent a postback

我有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不会更改为”,也没有一次可以使用。

我究竟做错了什么? 我去过这里好几天了:(

您可以使用一个好的技巧,只需将点击代码更改为此

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

在代码末尾添加return,以防止调用回发事件

尝试将要执行的JS代码包装在JS函数中,然后使用该函数和附加的return 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;' />

无论功能的大小或重要性如何,始终建议编写具有更好可维护性的代码。

希望能帮助到你!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM