Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jqueryajax验证MVC并发布到控制器_Jquery_Asp.net_Ajax_Asp.net Mvc - Fatal编程技术网

使用jqueryajax验证MVC并发布到控制器

使用jqueryajax验证MVC并发布到控制器,jquery,asp.net,ajax,asp.net-mvc,Jquery,Asp.net,Ajax,Asp.net Mvc,我对jQueryAjax有点陌生。我试图学习客户端jquery验证,而不使用DataAnnotation。当我按下登录按钮时,页面刷新不会使用ajax post发布到控制器的登录(用户x)方法。我不是专家,任何意见和建议都将不胜感激 我的模型 public class User { public String UserName { get; set; } public String Password { get; set; } } 我的控制器 public class Logi

我对jQueryAjax有点陌生。我试图学习客户端jquery验证,而不使用DataAnnotation。当我按下登录按钮时,页面刷新不会使用ajax post发布到控制器的登录(用户x)方法。我不是专家,任何意见和建议都将不胜感激

我的模型

public class User
{
    public String UserName { get; set; }
    public String Password { get; set; }
}
我的控制器

public class LoginController : Controller
{
  [HttpPost]
    public bool Login(User x)
    {
        return false;
    }

    public ActionResult LoginTst()
    {
        return View();
    }
}
视图是LoginTst&脚本

$(文档).ready(函数()
{
$(“#登录”)。单击(函数()
{
$(“#loginForm”).validate({
规则:{
用户名:{
要求:正确,
最小长度:2,
最大长度:15
},
密码:{
要求:正确,
最小长度:5,
最大长度:18
}
},
信息:{
用户名:{
必需:“用户名请求”,
minlength:“用户很小”,
maxlength:“用户很长”
},
密码:{
必需:“通过请求”,
minlength:“通行证很小”,
maxlength:“通行证很长”
}
},
submitHandler:函数(表单){
变量形式=$(“#loginForm”);
$.ajax({
cache:false,
async:true,
类型:“POST”,
url:form.attr('Login'),//它所执行的操作
数据:form.serialize(),
成功:功能(数据){
如果(数据==false){
警报(“用户名不存在”);
}
}
});
}
});
});
});

登录

问题在于您的操作未设置。您可以手动设置,也可以使用Html.BeginForm包装输入字段。后者允许您引用控制器以及控制器上的方法,而无需担心相对路径

以下是一个例子:

@using (@Html.BeginForm("Login", "Login", FormMethod.Post, new {@id="loginForm"}))
{   
    <div class="form-group">
      <input type="text" class="form-control" placeholder="Username" id="UserName" name="UserName">
    </div>
    <div class="form-group">
      <input type="password" class="form-control" placeholder="Password" id="Password" name="Password">
    </div>
    <div class="form-group">
      <button class="btn btn-warning btn-block" type="submit" id="signin">login</button>
    </div>  
}

您可以在这里找到一个工作的dotnetfiddle示例:

问题是您的操作没有设置。您可以手动设置,也可以使用Html.BeginForm包装输入字段。后者允许您引用控制器以及控制器上的方法,而无需担心相对路径

以下是一个例子:

@using (@Html.BeginForm("Login", "Login", FormMethod.Post, new {@id="loginForm"}))
{   
    <div class="form-group">
      <input type="text" class="form-control" placeholder="Username" id="UserName" name="UserName">
    </div>
    <div class="form-group">
      <input type="password" class="form-control" placeholder="Password" id="Password" name="Password">
    </div>
    <div class="form-group">
      <button class="btn btn-warning btn-block" type="submit" id="signin">login</button>
    </div>  
}

您可以在这里找到一个工作的dotnetfiddle示例:

您正在将URL设置为
form.attr('Login')
,但在HTML中,表单没有“Login”属性


您可能需要在表单上设置操作(设置为您想要的url),并在javascript中更改url以使用form.attr(“操作”)。

您正在将url设置为
form.attr(“登录”)
,但在HTML中,表单没有“Login”属性


您可能想做的是在表单上设置操作(设置为您想要的url),并在javascript中更改url以使用form.attr(“操作”)。

您的操作未设置为任何内容。您的操作未设置为任何内容。感谢您的回复,但我正试图在我的主页中调用ajax帖子script@abarthelot更新了我的答案。它仍然与Action属性相关,但还需要在您的
提交者中更新。很抱歉,回复太晚,我尝试了您的方式,验证停止工作,无需担心。有两个语法错误:在using语句之前缺少“@”,在声明登录表单ID时缺少引号。我在尝试时修复了这些错误,但仍然不起作用:(谢谢你的回复,但我想打电话给我的ajax帖子。)script@abarthelot更新了我的答案。它仍然与Action属性相关,但也需要在您的
submitHandler
中进行更新。很抱歉回复太晚,我尝试了您的方式,验证停止工作。无需担心。有两个语法错误:之前缺少“@”e声明登录表单ID时,using语句和缺少引号。我在尝试时修复了它们,但它仍然不起作用:(我在表单中添加了action=“@Url.action(“login”,“LoginController”)”,验证不起作用。当我删除它时,验证再次起作用,我甚至尝试了$(“#loginForm”).submit(函数(e){e.preventDefault(e);并在此处添加了ajax帖子});这会调用控制器中的操作方法,但会刷新页面尝试将“LoginController”更改为“Login”。您是否也将javascript从url:form.attr('Login')更改为url:form.attr('action')?是的,我签入了调试器,调试器调用了我想要的操作方法,但它没有使用submitHandler,而是使用默认submit形式,从“action”属性调用操作方法。我添加了action=“@Url.action”(“Login”,“LoginController”)”在表单中,验证不起作用。当我删除它时,验证再次起作用,我甚至尝试了$(“#loginForm”).submit(函数(e){e.preventDefault(e);并在此处添加了ajax帖子});这将调用控制器中的操作方法,但刷新页面尝试将“LoginController”更改为“Login”。您是否也将javascript从url:form.attr('Login')更改为url:form.attr('action')?是的,我检查了调试器,调试器调用了我想要的操作方法,但它没有使用submitHandler,而是使用了