Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.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
C# ASP.NET内核中通过表单的Ajax请求_C#_Asp.net Core - Fatal编程技术网

C# ASP.NET内核中通过表单的Ajax请求

C# ASP.NET内核中通过表单的Ajax请求,c#,asp.net-core,C#,Asp.net Core,因此,我知道我们可以使用$.ajax()执行ajax请求,但在ASP.NET Core中,我们应该能够使用标记帮助器通过表单本身轻松地发出ajax请求。我发现这个网站解释了怎么做 不过。当我提交表单时,它会重定向页面,而不仅仅是执行ajax请求 这就是我所做的: 我创建了一个新的ASP.NET核心Web应用程序 挑选的MVC类型 通过NuGet添加了Microsoft.jQuery.Unobtrusive.Ajax包 添加了一个新的MVC控制器(Controllers/LoginControl

因此,我知道我们可以使用$.ajax()执行ajax请求,但在ASP.NET Core中,我们应该能够使用标记帮助器通过表单本身轻松地发出ajax请求。我发现这个网站解释了怎么做

不过。当我提交表单时,它会重定向页面,而不仅仅是执行ajax请求

这就是我所做的:

  • 我创建了一个新的ASP.NET核心Web应用程序
  • 挑选的MVC类型
  • 通过NuGet添加了Microsoft.jQuery.Unobtrusive.Ajax包
  • 添加了一个新的MVC控制器(Controllers/LoginController.cs)
  • 添加了一个新视图(Views/Login/Index.cshtml)
  • 已将脚本添加到_layout.cshtml
  • 这些是我创建/修改的文件的内容
    Views/Login/Index.cshtml:

    @{
        ViewData["Title"] = "Index";
    }
    
    <h2>Index</h2>
    
    <form asp-controller="Login" asp-action="SaveForm"
          data-ajax-begin="onBegin" data-ajax-complete="onComplete"
          data-ajax-failure="onFailed" data-ajax-success="onSuccess"
          data-ajax="true" data-ajax-method="POST">
        <input type="submit" value="Save" class="btn btn-primary" />
    </form>
    
    <script>
        var onBegin = function () {
            alert("Begin");
        };
    
        var onComplete = function () {
            alert("Complete");
        };
    
        var onSuccess = function(context){
            alert(context);
        };
    
        var onFailed = function(context){
            alert(context);
        };
    </script>
    
    我在Views/Shared/_Layout.cshtml中更改的零件

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
        <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
        <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
    </environment>
    
     <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/lib/jquery/dist/jquery.unobtrusive-ajax.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    
    
    
    (添加了两个jquery验证脚本)

    我想在不刷新页面的情况下更新页面内容。例如,当用户试图使用不正确的凭据登录而不刷新整个页面时,显示错误消息

    我对ASP.NET一点经验都没有,所以我可能错过了一些明显的东西

    编辑:
    值得指出的是,当页面重定向时,它会重定向到/Login/SaveForm,并显示正确的数据。

    您引用的
    jquery.validate.unobtrusive.min.js
    似乎不起作用。 我做了测试演示,效果很好。我使用的Microsoft.jQuery.Unobtrusive.Ajax是V3.2.6

    我在_layout.cshtml中使用的jquery.unobtrusive-ajax脚本

    <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
        <script src="~/lib/jquery-validation/dist/jquery.validate.min.js"></script>
        <script src="~/lib/jquery-validation-unobtrusive/jquery.validate.unobtrusive.min.js"></script>
    </environment>
    
     <environment include="Development">
        <script src="~/lib/jquery/dist/jquery.js"></script>
        <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
        <script src="~/lib/jquery/dist/jquery.unobtrusive-ajax.js"></script>
        <script src="~/js/site.js" asp-append-version="true"></script>
    </environment>
    
    
    

    您可以从下载
    jquery.validate.unobtrusive.js
    并将其添加到您的wwwroot/lib/jquery/dist

    [HttpPost]
    属性添加到您的
    SaveForm()
    方法。@GaganDeep刚刚尝试过。很遗憾,这不起作用。请检查浏览器控制台在表单提交时是否有错误。@GaganDeep没有错误。只有200个回复。我添加了一些编辑,以便更清楚地了解当前发生的情况。您可以将onsuccess方法的名称更改为onsuccesscall或其他任何名称。我知道这个建议是有关联的,但如果我没记错的话,我也曾有过一次。这很有效!首先,我使用NuGet包完成了这项工作,并遵循了教程。我不得不添加两个脚本,但我猜这些脚本不能正常工作。下载你提供的文件解决了我的问题!