Подтвердить что ты не робот

Можете ли вы просто обновить частичный вид вместо полного сообщения страницы?

Есть ли способ отправить частичную форму представления в asp.net mvc без перезагрузки родительской страницы, но перезагрузка частичного представления только в новое состояние? Подобно тому, как обновляются knockout.js, используя привязку данных.

Моя таблица данных отображает переменное количество столбцов/имен, поэтому я не думаю, что knockout.js является вариантом для этого, поэтому я пытаюсь использовать частичное представление.

4b9b3361

Ответ 1

Не без jQuery.

Что вам нужно сделать, это поставить Partial в div, что-то вроде:

<div id="partial">
    @Html.Partial("YourPartial")
</div>

Затем, чтобы обновить (например, нажав кнопку с идентификатором button), вы можете сделать:

$("#button").click(function () {
   $.ajax({
       url: "YourController/GetData",
       type: "get",
       data: $("form").serialize(), //if you need to post Model data, use this
       success: function (result) {
           $("#partial").html(result);
       }
   });
}

Тогда ваше действие будет выглядеть примерно так:

public ActionResult GetData(YourModel model) //that if you need the model
{
    //do whatever

    return View(model);
}

Ответ 2

Собственно, если ваш Partial имеет метод дочернего действия, вы можете отправить (или даже использовать привязку) непосредственно к дочернему действию и получить Ajax-подобный аффект. Мы делаем это в нескольких Представлениях.

Синтаксис

@Html.Action("MyPartial")

Действие Child

public ActionResult MyPartial()
{
    return PartialView(Model);
}

Если ваша форма отправляется дочернему действию

@using (Html.BeginForm("MyPartial"))
{
    ...
}

Частичный вид будет обновлен с частичным представлением, возвращаемым дочерним действием.

Jquery по-прежнему является законным способом обновления частичного. Но технически ответ на ваш вопрос: ДА.

Ответ 3

Я использовал бы помощник формы Ajax для таких сценариев, используя частичный вид и @html.RenderPartial( "partialName" ) частичные помощники

Ответ 4

Как обычно, что я нахожу при поиске таких вещей, люди дают слишком ограниченную информацию, поэтому я попытаюсь помочь здесь. Ключ должен установить div с идентификатором, к которому вы можете добавить возвращаемый html. Также, когда вы нажимаете ваш контроллер, убедитесь, что он возвращает частичный. Есть некоторые потенциальные проблемы с этим методом, но в хороший день он должен работать.

<div id="CategoryList" class="widget">
    @{
        Html.RenderPartial("WidgetCategories.cshtml");
    }
</div>

          function DeleteCategory(CategoryID) {
            $.get('/Dashboard/DeleteWidgetCategory?CategoryID=' + CategoryID,
                function (data) {
                    if (data == "No") {
                        alert('The Category has report widgets assigned to it and cannot be deleted.');
                    }
                    else {
                        $('#CategoryList').html(data);
                    }

                }
            );
        }


    [HttpGet("DeleteWidgetCategory")]
    [HttpPost("DeleteWidgetCategory")]
    public IActionResult DeleteWidgetCategory(string CategoryID)
    {
        string Deleted = CategoryModel.DeleteCategory(CategoryID);

        if (Deleted == "Yes")
        {
            return PartialView("WidgetCategories");
        }
        else
        {
            return this.Json("No");
        }
    }