1、前端使用js ajax json 传递数据,注意要避免表单自动提交,需添加
<form onsubmit="return false;">
<script type="text/javascript">
$(document).ready(function () {
$("form").submit(function () {
$.ajax({
url: '/Home/Login',//接收数据后端路径
type: 'post',//提交方式
dataType: 'json',//传递数据类型
data: $("form").serializeArray(),//不用手动将表单数据写成json格式,这个函数直接帮你序列换转成json格式,当然传文件不能直接这么写
success: function (data) {//后端返回的数据,参考下面后端代码理解
if (data.Result == 1) {
alert(data.PromptMsg);
self.location = document.referrer;//asp自动返回并刷新
} else if (data.Result == 0) {
alert(data.PromptMsg);
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert(errorThrown);
}
});
});
});
</script>
2、asp.net MVC 后端实现接收、处理数据并返回数据
(1)当你第一访问页面时可能不需要处理任何数据,那就可以使用[HttpGet]注解的Action来显示页面
当页面传来数据后一定是以post方式提交,所以他必然会使用[HttpPost]注解的Action方法处理数据并返回
[HttpGet]
public ActionResult Login()
{
return View();
}
(2)这里是处理前端json数据,函数仍然需要使用参数的方式接受数据,而且参数名字必须与表单标签name属性名字一致(这是我传递json数据时直接使用了序列化,也就是key-value里的key即为表单标签里的name),必须有参数,因为没有参数他就会和[HttpGet] 注解的方法矛盾。
[HttpPost]
public ActionResult Login(string loginEmail, string loginPassword)
{
//这里的AjaxResult是我自定义的类,我觉得使用这样一个工具类会方便很多,详细参考第 三步
AjaxResult ajaxResult = new AjaxResult();
if (loginEmail == "" || loginPassword == "")
{
ajaxResult.Result = DoResult.Failed;
ajaxResult.PromptMsg = "请将信息填全!!";
}
else
{
user u = new user();
u.Email = loginEmail;
u.Password = loginPassword;
user findUser = Op_User.FindUser(u);
if (findUser != null)
{
ajaxResult.Result = DoResult.Success;
ajaxResult.PromptMsg = "登录成功";
//设置登录状态
Session["USER"] = findUser;
}
else
{
ajaxResult.Result = DoResult.Failed;
ajaxResult.PromptMsg = "邮箱或者密码不对";
}
}
return Json(ajaxResult);
}
(3)工具类 AjaxResult,第二步使用了,
namespace ProtectAnimal.Models
{
public class AjaxResult
{
public AjaxResult() { }
//提示信息
public string PromptMsg { get; set; }
//返回成功与否
public DoResult Result { get; set; }
//返回类型
public object RetValue { get; set; }
//这里你可以自定义很多数据类型根据你的需要
}
public enum DoResult
{
//同样这里你可设置很多值
Failed=0,
Success=1,
OverTime=2,
UnSession=3
}
}