ASP MVC - отправить операции обновления или создания в частичном представлении без загрузки страницы - PullRequest
0 голосов
/ 25 мая 2018

Вот мой индексный вид, где представления частичек загружаются в div ниже

 @model IEnumerable<FullStackTest.Models.CLIENT>    
@{
        ViewBag.Title = "Index";
    }

<style>
    #title {
        font-family: Georgia, 'Times New Roman', Times, serif;
    }
</style>

<div class="text-center jumbotron">
    <h2 id="title" class="text-center">Clients</h2>
    Current time: @DateTime.Now.ToLongTimeString()
    <br />
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    <script type="text/javascript" language="javascript">
        function ClearResults() {
            $("#divClients").empty();
        }
    </script>
</div>

@Ajax.ActionLink("Full List", "All", new AjaxOptions
{
    HttpMethod = "GET",
    UpdateTargetId = "divClients",
    InsertionMode = InsertionMode.Replace,
    OnBegin = "ClearResults"
})

<span style="color:black">||</span>

@Ajax.ActionLink("Create", "Create", new AjaxOptions
{
    HttpMethod = "GET",
    UpdateTargetId = "divClients",
    InsertionMode = InsertionMode.Replace,
    OnBegin = "ClearResults"
})

<div id="divClients" class="well">
    @* Placeholder for the content *@
</div>

Ссылки AJAX Action загружают страницу в индекс, но когда я нажимаю кнопку отправки на странице создания(частичное представление) перезагружается вся страница.

Страница создания - это просто еще одна страница CSHMTL:

@model FullStackTest.Models.CLIENT

@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

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

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

        <div class="form-group">
            @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.Email, "", 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>
}

Вот мой контроллер:

public class ClientsController : Controller
    {
        private ContextClass db = new ContextClass();

        public ActionResult Index()
        {
            return View();
        }

        public PartialViewResult All()
        {
            List<CLIENT> model = db.CLIENTs.ToList();
            return PartialView("_Client", model);
        }

        public PartialViewResult Details(int? id)
        {
            CLIENT client = db.CLIENTs.Find(id);
            return PartialView("_Details", client);
        }

        public PartialViewResult Create()
        {
            return PartialView("_Create");
        }

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "Id,First,Last,Email")] CLIENT client)
        {
            db.CLIENTs.Add(client);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
// More code

Я знаючто вы должны использовать AJAX, но я не уверен, где именно его добавить, чтобы БД создала новую запись без обновления представления индекса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...