0

我有一个DropDownList连接到一个文本框。当事件SelectedIndexChanged被触发时,文本框中的文本发生变化。文本框的内容也可以通过用户输入进行更改。在页面结尾处,用户必须提交数据(按钮)。 当javascript被启用时,一切正常,但我也有用户的JavaScript被禁用。 如果没有javascript,DropDownList的SelectedIndexChanged事件在按钮单击后(在处理按钮的Click事件之前)被调用。用户输入到文本框会被SelectedIndexChanged事件覆盖。asp.net检测DropDownList.SelectedIndexChanged后按钮点击(JS禁用)

如何在Code后面检测SelectedIndexChanged事件是否由点击按钮触发?如何获取用户更改的文本框的文本?

编辑: 我可以使用属性IsPostBackEventControlRegistered?当我单击按钮时,这似乎总是如此,但在SelectedIndexChanged事件中为false。

+0

平原和简单,你不能。 Javascript是什么使Webform魔术阿贾克斯工作。 – mituw16

回答

0

嗯,这是可能的,但并不容易。你会基本上是需要跟踪的JavaScript是否通过使用一个隐藏字段启用,这样做:

<asp:HiddenField ID="JSEnabled" runat="server" ClientIDMode="Status" Value="F" /> 

<script type="text/javascript"> 
    function checkForJavaScript() { 
     $("#JSEnabled").val("T"); 
    } 
</script> 

你打电话从在window.onload或jquery.ready事件这个脚本,不管你喜欢JS选项,这样就可以告诉你是否启用了JS来执行selectedindexchanged事件,或者是否有按钮触发它,因为JS未启用。告诉按钮是否被点击,并引起回传,你可以检查:

Request.Form.Get("__EVENTTARGET") 

现场,看看ID的UniqueID的相匹配的按钮。 ASP.NET中的每个控件都会在此处设置其ID(通常,但并非总是如此)。虽然,我不确定,但您可能必须设置UseSubmitBehavior="False"才能实现。隐藏的字段可以被操纵,所以它不是全面的。

你应该问的问题是你真的需要这种复杂性吗?

+0

我只想避免用户输入到文本框被事件覆盖。也许最简单的方法是使用javascript onchange函数实现DropDownList和Textbox之间的连接,而不是使用SelectedIndexChanged。 – purbsel