ASP.Net button第一次点击js中的回调函数不执行,第二次点击才执行

Lee丶Co 2017-06-16 12:50:31
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CheIndexOnce.aspx.cs" Inherits="Monkey.Web.admin.CheIndexOnce" %>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<title>管理员登录</title>
<link href="skin/login/Site.css" rel="stylesheet" />
<script type="text/javascript" src="../scripts/jquery/jquery-1.11.2.min.js"></script>
<script type="text/javascript">
$(function () {
//检测IE
if ('undefined' == typeof (document.body.style.maxHeight)) {
window.location.href = 'ie6update.html';
}
});

function jsFunction() {
PageMethods.Encrypt(document.getElementById("txtUserName").value, jiami);
PageMethods.Encrypt(document.getElementById("txtPassword").value, jiami2);
if (document.getElementById("posx").value != "") {
document.getElementById("txtPassword").value = "";
return true;
}
return false;
}



function jiami(val) //回传方法用val接受后台代码的执行结果
{
document.getElementById("posx").value = val;
}
function jiami2(val) //回传方法用val接受后台代码的执行结果
{
document.getElementById("posx2").value = val;
}
</script>
</head>

<body class="login_body">
<div class="login">
<div class="content">
<div class="logo">
<div class="logo_content">
<img src="skin/login/180.png" />
<div class="right_logo">

</div>
</div>
</div>
<div class="footer_content">
<hr />

<form id="form1" runat="server" class="form-login">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"> </asp:ScriptManager>
<ul>
<li>
<li>
<input id="txtUserName" type="text" class="loginipt user login-input " placeholder="用户名" title="用户名" /></li>
<li>
<input id="txtPassword" type="password" class="loginipt password login-input" autocomplete="off" placeholder="密码" title="密码" /></li>
<li>
<label id="msgtip" runat="server" class="logintext"></label>
</li>
<asp:Button ID="btnSubmit" runat="server" Text="登录" CssClass="loginbtn login-btn" OnClick="btnSubmit_Click" />
</ul>
<asp:HiddenField ID="posx" runat="server" />
<asp:HiddenField ID="posx2" runat="server" />
</form>

</div>
</div>
<div class="footer">

</div>
</div>
</body>
</html>

后台:
using System;
using System.Web.UI;
using Monkey.Common;
using System.Security.Cryptography;
using System.Configuration;
using System.Web;
using System.Text;
using System.Web.Services;


namespace Monkey.Web.admin
{
public partial class CheIndexOnce : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//txtUserName.Text = Utils.GetCookie(DTKeys.COOKIE_URL_ADMIN_NAME);
btnSubmit.Attributes.Add("OnClick", "return jsFunction()");
}

}

protected void btnSubmit_Click(object sender, EventArgs e)
{
string key = "ae125efkk4454eeff444ferfkny6oxi8";
string userName = "";
string userPwd = "";
try
{
userName = Request.Params["posx"];
userPwd = Request.Params["posx2"];
userName = Decrypt(userName, key);
userPwd = Decrypt(userPwd, key);
}
catch {
return;
}

if (userName.Equals("") || userPwd.Equals(""))
{
msgtip.InnerHtml = "请输入用户名或密码";
return;
}

if (Session[DTKeys.COOKIE_URL_ADMIN_LOGIN_SUN] == null)
{
Session[DTKeys.COOKIE_URL_ADMIN_LOGIN_SUN] = 1;
}
else
{
Session[DTKeys.COOKIE_URL_ADMIN_LOGIN_SUN] = Convert.ToInt32(Session["AdminLoginSun"]) + 1;
}
//判断登录错误次数
if (Session[DTKeys.COOKIE_URL_ADMIN_LOGIN_SUN] != null && Convert.ToInt32(Session[DTKeys.COOKIE_URL_ADMIN_LOGIN_SUN]) > 5)
{
msgtip.InnerHtml = "错误超过5次,关闭浏览器重新登录!";
return;
}

BLL.manager bll = new BLL.manager();
Model.manager model = bll.GetModel(userName, userPwd, true);
if (model == null)
{
msgtip.InnerHtml = "用户名或密码有误,请重试!";
return;
}

Session[DTKeys.SESSION_ADMIN_INFO] = model;
Session.Timeout = 45;
//写入登录日志
Model.siteconfig siteConfig = new BLL.siteconfig().loadConfig();
if (siteConfig.logstatus > 0)
{
new BLL.manager_log().Add(model.id, model.user_name, DTEnums.ActionEnum.Login.ToString(), "用户登录");
}

//写入Cookies
Utils.WriteCookie(DTKeys.COOKIE_URL_ADMIN_NAME, model.user_name, 14400);

//跳转
Response.Redirect("index.aspx");
return;
}

/// <summary>
/// AES加密
/// </summary>
/// <param name="encryptStr">明文</param>
/// <param name="key">密钥</param>
/// <returns></returns>
[WebMethod]
public static string Encrypt(string encryptStr)
{

string key = "ae125efkk4454eeff444ferfkny6oxi8";
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(encryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateEncryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return Convert.ToBase64String(resultArray, 0, resultArray.Length);
}

/// <summary>
/// AES解密
/// </summary>
/// <param name="decryptStr">密文</param>
/// <param name="key">密钥</param>
/// <returns></returns>
public static string Decrypt(string decryptStr, string key)
{
byte[] keyArray = UTF8Encoding.UTF8.GetBytes(key);
byte[] toEncryptArray = Convert.FromBase64String(decryptStr);
RijndaelManaged rDel = new RijndaelManaged();
rDel.Key = keyArray;
rDel.Mode = CipherMode.ECB;
rDel.Padding = PaddingMode.PKCS7;
ICryptoTransform cTransform = rDel.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);
return UTF8Encoding.UTF8.GetString(resultArray);
}
}
}
...全文
259 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 4 楼 baidu_32111313 的回复:
[quote=引用 2 楼 sp1234 的回复:] 在 asp.net 中要想动调用一个方法,应该类似这样写:
void 某某处理方法(....)
{
    ......数据处理
   ScriptManager.RegisterStartupScript(this, this.GetType(), "abc",  "callfunction(1234, 'aaaa');", true);
这样在处理了数据之后,页面刷新时,调用函数 callfunction。 但是不能 Redirect 到其它页面,这也是一个逻辑问题。
实在不知该怎么弄 我就是想把用户名和密码 先在前台用aes加密了之后 再传递到后台 这到底该怎么弄呢[/quote] 、 后台不需要加密,前台加密!
  • 打赏
  • 举报
回复
引用 3 楼 baidu_32111313 的回复:
我就是想把用户名和密码 先在前台用aes加密了之后 再传递到后台 这到底该怎么弄呢
这有什么困难的? 你再后台先进行验证,用户登录信息是否正确。 如果正确,调用加密函数加密不就行了吗?干嘛非要加密后再传后台
Lee丶Co 2017-06-16
  • 打赏
  • 举报
回复
引用 2 楼 sp1234 的回复:
在 asp.net 中要想动调用一个方法,应该类似这样写:
void 某某处理方法(....)
{
    ......数据处理
   ScriptManager.RegisterStartupScript(this, this.GetType(), "abc",  "callfunction(1234, 'aaaa');", true);
这样在处理了数据之后,页面刷新时,调用函数 callfunction。 但是不能 Redirect 到其它页面,这也是一个逻辑问题。
实在不知该怎么弄 我就是想把用户名和密码 先在前台用aes加密了之后 再传递到后台 这到底该怎么弄呢
Lee丶Co 2017-06-16
  • 打赏
  • 举报
回复
我就是想把用户名和密码 先在前台用aes加密了之后 再传递到后台 这到底该怎么弄呢
  • 打赏
  • 举报
回复
在 asp.net 中要想动调用一个方法,应该类似这样写:
void 某某处理方法(....)
{
    ......数据处理
   ScriptManager.RegisterStartupScript(this, this.GetType(), "abc",  "callfunction(1234, 'aaaa');", true);
这样在处理了数据之后,页面刷新时,调用函数 callfunction。 但是不能 Redirect 到其它页面,这也是一个逻辑问题。
  • 打赏
  • 举报
回复
什么叫做“用val接受后台代码的执行结果”呢? 就算是你的 jsFunction 函数可移植性,它也是在 submit 动作之前执行,然后才提交到asp.net 的“后台”。怎么可能是“接受执行结果”呢?顶多是这里显示了上一次提交的结果。 你的逻辑错误。

62,243

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧