如何使RadTextBox TextMode=密码接受代码后面的自动填充值



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控件最初识别浏览器中输入的值,而不必多次单击后面的代码才能看到值?

谢谢你的帮助。

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

我以前遇到过这样的问题,通过使用jQuery xxx.val("…")设置为RadTextBox的值在回发时无法传递到服务器端。

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

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

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

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>

希望能有所帮助。

最新更新