Asp.net mvc 尝试通过AJAX Asp.net登录-MVC 3-不工作
我一直试图通过AJAX登录,但不知怎么的,它不起作用 我的控制器操作是Asp.net mvc 尝试通过AJAX Asp.net登录-MVC 3-不工作,asp.net-mvc,ajax,asp.net-mvc-3,jquery,Asp.net Mvc,Ajax,Asp.net Mvc 3,Jquery,我一直试图通过AJAX登录,但不知怎么的,它不起作用 我的控制器操作是 public string CheckLogin(Users checkuser) { if (db.CheckUserLoginDetails(checkuser.Email, checkuser.Password)) { return "Login Successful:" + checkuser.Email;
public string CheckLogin(Users checkuser)
{
if (db.CheckUserLoginDetails(checkuser.Email, checkuser.Password))
{
return "Login Successful:" + checkuser.Email;
}
else
{
return "Login UnSuccessful";
}
}
我对AJAX代码的看法是
$(':submit').click(function (e) {
var username = $('#username').val();
var password = $('#password').val();
var postdata =
{
'Email': username,
'Password': password
};
$.post({
url: 'http://localhost:7651/Home/CheckLogin',
data: postdata,
success: function (msg) {
$('#Result').html(msg);
}
});
});
我不知道代码中有什么错误…但有些人认为根本不需要调用控制器操作
[Key]
public virtual int UserID { get; set; }
[Required(ErrorMessage="Required")]
public virtual string FirstName { get; set; }
[Required(ErrorMessage = "Required")]
public virtual string LastName { get; set; }
[Required(ErrorMessage = "Required")]
[DataType(DataType.EmailAddress)]
public virtual string Email { get; set; }
[Required(ErrorMessage = "Required")]
[DataType(DataType.Password)]
public virtual string Password { get; set; }
[DataType(DataType.Date)]
public virtual DateTime JoiningDate { get; set; }
@model Temp1.Models.Users
@{
ViewBag.Title = "Index";
}
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js") type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.5.1-vsdoc.js") type="text/javascript"></script>
<h2>Login</h2>
@using (Html.BeginForm("CheckLogin", "Home"))
{
@*<p>
<input type="text" id="username" value="" />
</p>
<p>
<input type="password" id="password" value="" />
</p>
*@
@Html.TextBoxFor(model => model.Email)
@Html.PasswordFor(model => model.Password)
<p>
<input type="button" value="Login" id="btnLogin" />
</p>
<div id="Result">
</div>
}
<script type="text/javascript">
$('#btnLogin').click(function (e) {
var postdata =
{
"Email": "temp@temp.com",
"Password": "temp123"
};
$.ajax({
url: '@Url.Action("CheckLogin","Home")',
data: postdata,
success: function (msg) {
$('#Result').html(msg);
},
error: function (data) {
$('#Result').html(msg);
}
});
});
</script>
@model Temp1.Models.Users
@{
ViewBag.Title=“Index”;
}
登录
@使用(Html.BeginForm(“CheckLogin”、“Home”))
{
@*
*@
@Html.TextBoxFor(model=>model.Email)
@Html.PasswordFor(model=>model.Password)
}
$('#btnLogin')。单击(函数(e){
var postdata=
{
“电子邮件”:temp@temp.com",
“密码”:“temp123”
};
$.ajax({
url:'@url.Action(“CheckLogin”,“Home”),
数据:postdata,
成功:功能(msg){
$('#Result').html(msg);
},
错误:函数(数据){
$('#Result').html(msg);
}
});
});
你的帖子留给我的问题多于答案。我会花一些时间调试
您的ajax提交url应该是这样的“/controler/action”。最佳实践是使用
Url.Action(“actionName”、“ControlerName”)
,否则,当您部署到其他地方时,必须更改jQuery
$.post({
url: '@Url.Action("CheckLogin","Home")'
data: postdata,
success: function (msg) {
$('#Result').html(msg);
}
});
如果这样做不起作用,试着像这样改变你的行为
public string CheckLogin( string Email, string Password){
}
并更改您的postData
var postdata =
{
Email: username,
Password: password
};
控制器操作返回的是字符串,而不是ActionResult,在本例中,它将是ContentResult 尝试:
哦,试着像上面那样更改你的postData。运气不好…:(你认为我需要阻止提交按钮来发布表单吗…比如e.preventDefault()啊,不要使用提交按钮。因为你不需要提交(你使用的是ajax post)。只要你用一个带有一些Id的HTML按钮并更改Jquery选择器,你就可以在firebugNo post Request中看到帖子……如果我必须使用AJAX,我只能在firebugNo中看到帖子。Beginform()instade of HTML.Beginform()?不管哪种方式,你都需要:)加载fiddler并确保请求得到响应。下一步,您可能需要使用路由调试器。好的。。。我不知道我做了什么,但现在它可以很好地处理虚拟数据…请告诉我如何从JqueryGo中的@Html.TextBoxFor(model=>model.email)检索值,以使用字符串而不是内容结果。重新编译并再次运行。如果它坏了。。。。将此标记为答案:)
public ContentResult CheckLogin(Users checkuser)
{
if (db.CheckUserLoginDetails(checkuser.Email, checkuser.Password))
{
return Content("Login Successful:" + checkuser.Email);
}
else
{
return Content("Login UnSuccessful");
}
}