#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. я все делаю правильно или нет?