ajax post дважды срабатывает при каждой отправке формы

#ajax #forms #asp.net-mvc-5

#ajax #формы #asp.net-mvc-5

Вопрос:

я работаю с asp.net mvc5 и пытается отправить форму на контроллер без обновления страницы с помощью ajax. но проблема в том, что каждый раз, когда я нажимаю кнопку отправки, она отправляет данные много раз. только в первый раз, когда он отправляет форму один раз. но во второй раз он отправляет дважды, а в третий раз отправляет четыре раза и …

вот мой контроллер

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using UniProject.Models;

namespace UniProject.Controllers
{
  public class TestController : Controller
    {
    MyContext db = new MyContext();
    // GET: Test
    [HttpGet]
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Create(Test test)
    {
        try
        {
            if (ModelState.IsValid)
            {
                db.Tests.Add(test);
                db.SaveChanges();
                ViewBag.Record = "Data Inserted";
                return PartialView("Index");
            }
            else
            {
                ViewBag.Record = "Error";
                return View(test);
            }
        }
        catch
        {
            ViewBag.Record = "Error";
            return View();
        }
    }
  }
}
 

это мое мнение

 @model UniProject.Models.Test

@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<script src="~/Scripts/jquery-1.10.2.js"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>

<h2>Index</h2>

<div id="div">
    @Html.Partial("Form" , Model)
</div>

<div>
    @Html.ActionLink("Back to List", "Index")
</div>
 

Мой частичный просмотр

 @model UniProject.Models.Test

@using (Ajax.BeginForm("Create" , "Test" , new AjaxOptions { HttpMethod =    "post" , UpdateTargetId = "div"}))
{
    @Html.AntiForgeryToken()

<div class="form-horizontal">
    <h4>Test</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(model => model.TestName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.TestName, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.TestName, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.TestTitle, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.TestTitle, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.TestTitle, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" />
        </div>
    </div>
</div>
}
 

это представление формы после однократного нажатия кнопки отправки
изображения формы

а это база данных изображений Записей базы данных

пожалуйста, помогите мне с этим вопросом. заранее спасибо…

Комментарии:

1. Вы возвращаете полный вид (именно поэтому вы дважды видите заголовок «Индекс») и, следовательно, включаете jquery.unobtrusive-ajax.min.js его дважды. Метод контроллера должен возвращать только частичное — return PartialView("Form"); хотя неясно, почему вы возвращаете представление, если ModelState оно допустимо — вы должны перенаправлять.

2. большое вам спасибо, что ваша инструкция сработала для меня. но тот jquery.unobtrusive-ajax.min.js включается только один раз.

3. Нет, его нет — сначала он находится в Index представлении, затем вы загружаете его снова (потому что вы Index снова возвращаете представление в методе контроллера) И если вы отправите снова, будут загружены 3 копии и т.д.

4. я новичок в asp.net и еще одна вещь, пожалуйста. что вообще должен возвращать метод create?

5. я все делаю правильно или нет?