0

Google Chrome 和 FireFox 浏览器具有允许用户将用户名和密码保存到本地计算机的功能。这使他们下次登录时无需付出太多努力或记住该信息是什么。信息基本上是自动填充的。当这些浏览器这样做时,它会显示*。显示浏览器成功地将值放置在 RadTextBox 中。但是,当后面的 c# 代码将该值检索为空字符串时。

我的代码如下

<telerik:RadTextBox ID="txtPassword" runat="server" ToolTip="Enter password" 
                    Text="" MaxLength="40" EnableSingleInputRendering="False"
                    Wrap="False" TextMode="Password" CausesValidation="false" Skin="WebBlue">
</telerik:RadTextBox>    

代码背后:

objLogin.Password = txtPassword.Text;

更奇怪的是,如果您多次单击该按钮,那么后面的代码将看到实际值并继续让您登录。似乎需要第二次呈现 RadTextBox 控件或需要回发以便控制正常工作。

我需要做什么才能让 RadTextBox 控件最初识别来自浏览器的输入值,而不必多次单击后面的代码来查看值?

谢谢你的帮助。

4

1 回答 1

0

这是因为您的文本框仅在客户端获取值,而底层 RadTextBoxes 值则没有。

我之前遇到过这个问题,使用 jQuery xxx.val('...') 设置为 RadTextBox 的值在回发时无法到达服务器端。

从客户端获取“分配”给 RadTextBox 控件的 Text 属性的值的唯一方法是使用:

$find('<%= txtUsername.ClientID%>').set_value('newvalue');

在您的情况下,浏览器很可能会设置(自动填充)这些值并且仅在客户端可用。因此,实际分配这些值的方法是在登录按钮回发之前进行拦截,如下所示:

var un = $('#<%= txtUsername.ClientID%>').val();
var pw = $('#<%= txtPassword.ClientID%>').val();

$find('<%= txtUsername.ClientID%>').set_value(un);
$find('<%= txtPassword.ClientID%>').set_value(pw);

如果您使用 RadButton 作为登录按钮,这可以在按钮的 OnClientClicking/OnClientClicked 事件上完成,如下所示:

<telerik:RadButton ID="cmdSignin" runat="server" Text="Sign In" 
    SingleClick="true" SingleClickText="Signing In..." 
    OnClientClicking="OnClientClicking"></telerik:RadButton>

希望有帮助。

于 2013-08-29T14:35:23.393 回答