ASP.NET Core MVC首先提交按钮单击返回错误(终止的会话)

时间:2018-08-07 08:03:48

标签: jquery ajax asp.net-mvc http-post

对此我完全陌生,我正在尝试学习如何使用Ajax从JS进行API调用。

我使用MVC启动了ASP.NET Core Web应用程序。

我用一个提交按钮在Index.cshtml中创建了一个HTML表单(我以后会在想使用一些剃刀功能!)

<form id="login_form">

    <input id="submit_button" type="submit" value="Submit" onclick="GeneralPost()"/>

</form>

我注意到的是,当我从Visual Studio启动调试模式(服务器运行)后,第一次单击“提交”按钮会返回错误。但是,单击此后的按钮将返回成功!

这是我放在site.js文件夹中的Ajax

function GeneralPost() {
var  data = "Data To Pass";
$.ajax({
    type: "POST",
    url: '/Home/Login',
    data: JSON.stringify(data),
    contentType: "application/json; charset=utf-8",
    dataType: "json",

    success: function (response) {
        alert(response.name);              
    },
    error: function () {
        alert("Error");
    }

});
}  

这是我的控制器

 public class HomeController : Controller
{

    // What I wrote 
    [HttpPost()]
    public User Login([FromBody]string data)
    {

        User user = new User(); ;
        user.name = $"User {data}";
        user.id = "1";
        return user;

    }

    // the rest is already there from the MVC example by visual studio (deleted some code to make it shorter)
    public IActionResult Index()
    {
       return View();
    }

    public IActionResult About()
    {
        ViewData["Message"] = "Your application description page.";

        return View();
    }

我还注意到,当我单击剃刀页面上的“提交”按钮时,将执行Index()操作。我不确定为什么在我请求登录操作时始终执行索引操作! MVC有什么用吗?这与我第一个中止要求有关吗?

我认为从Startup.cs中包含我的配置也是一个好主意,因为我不确定我是否还了解全部内容,并且我正在尝试提供尽可能多的有用信息

      // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Home/Error");
            app.UseHsts();
        }


       // app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseCookiePolicy();

        app.UseMvc(routes =>
        {

            routes.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");

        });
    }

总结一下:

1-从Visual Studio启动调试会话后,第一次按下提交按钮时,出现错误,并且Fiddler向我显示会话状态已中止。

2-即使我在新标签页或新浏览器上第二次按下按钮,我也能获得预期的结果而不会出错。

有什么想法吗?感谢您的帮助

1 个答案:

答案 0 :(得分:0)

我找到了以下问题的解决方案

AJAX request doesn't work the first time but works thereafter 我想我使用了错误的搜索关键字!

基本上,表单的类型为Submit。因此,当我按下“提交”按钮时,它将刷新页面,从而导致请求受到干扰并中止。