【问题标题】:how to trigger a set commands when user setfocus on a text box in a website using c#当用户使用c#在网站中的文本框上设置焦点时如何触发设置命令
【发布时间】:2009-05-16 00:44:40
【问题描述】:

我在网页中有一个用户名文本框和一个密码文本框。

我希望用户名文本框在失去焦点/当用户单击密码文本框时读取以下代码?使密码自动显示在密码文本框中。

    String cookiename = usernameTextBox.Text;

    //grab cookie
    HttpCookie cookie = Request.Cookies[cookiename];

    //exists?
    if (null == cookie)
    {
        Label1.Text = "cookie not found";
    }
    else
    {
        passwordTextBox.Attributes.Add("value", cookie.Value.ToString());
    }

Focus 是我发现的唯一可用的东西,我知道它很相似,但我似乎无法弄清楚。

谢谢,

【问题讨论】:

标签: textbox focus


【解决方案1】:

这里有两个问题:

一,为什么要将用户密码以纯文本形式存储在 cookie 中?这非常不安全!这根本不安全,您可能还没有密码。有很多方法可以处理这个问题。这是一个简单的例子:

如果您希望网站“记住”用户的密码,请生成唯一令牌(例如 GUID)并将 GUID 与他们的帐户信息一起存储在服务器上作为“活动会话”,并将 GUID 存储在曲奇饼。当用户访问该站点时,检查令牌 cookie 是否存在,如果存在,您可以将其与服务器端的用户登录信息相匹配,并完全绕过登录页面。还有其他需要考虑的事情,但这是基本概念。

第二,您当前的设计需要类似 AJAX 的回调。您用 c# 编写的代码在服务器上运行,但焦点/模糊事件发生在客户端。

从纯粹的技术角度来看,您应该编写 JavaScript 来处理整个过程。一个 JS 函数可以运行 onblur() 并且 JS 可以像 .NET 一样读取 cookie:

var usernameBox = document.getElementById('usernameBox');
usernameBox.onblur = handleBlur;

function handleBlur() {
    var passwordBox = document.getElementById('passwordBox');
    passwordBox.value = readCookie(cookieName);
}

function readCookie(cookieName) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return "";
}

(注意getElementById 使用客户端 ID,而不是 ASP.NET ID)

您的安全问题是一个更大的问题。没有办法解决你想要完成的事情;这从根本上来说是个坏主意。

【讨论】:

  • 嗨,谢谢回复,我正在制作一个简单的原型,我必须简单地展示这个过程。 ;) 我应该把这段代码放在哪里?对不起,我的编程还没有那么好!
  • 我添加了相关代码,将 handleBlur() 函数附加到文本框的模糊事件中。
猜你喜欢
  • 2016-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多