Как я могу загрузить частичный вид внутри вид

Я очень путаю с этим частичным представлением...

Я хочу загрузить частичный вид внутри моего основного вида ...

вот простой пример...

я загружаю индекс.cshtml действия индекса Homecontroller в качестве главной страницы..

в индекс.cshtml я создаю ссылку через

@Html.ActionLink("load partial view","Load","Home")

В HomeController я добавляю новое действие под названием

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

в _LoadView.cshmtl я просто

<div>
    Welcome !!
</div>

но, при запуске проекта, Индекс.cshtml сначала отображает и показывает мне ссылку "Загрузить частичный вид"... когда я нажимаю на том, что он едет в Нью-instade страницы оказания приветственное сообщение от _LoadView.cshtml в индекс.cshtml по.

что может быть не так?

примечание: Я не хочу загружать страницу через AJAX или не хочу использовать Ajax.Actionlink панели

8 ответов


если вы хотите загрузить частичный вид в главном окне вы можете использовать Html.Action помощник:

@Html.Action("Load", "Home")

или, если вы не хотите проходить через действие загрузки, используйте HtmlPartial hepler:

@Html.Partial("_LoadView")

если вы хотите использовать Ajax.ActionLink, заменить Html.ActionLink С:

@Ajax.ActionLink(
    "load partial view", 
    "Load", 
    "Home", 
    new AjaxOptions { UpdateTargetId = "result" }
)

и, конечно, вам нужно включить держатель на Вашей странице, где будет отображаться частичный:

<div id="result"></div>

также не забудьте включить:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

в вашем основном представлении, чтобы включить Ajax.* помощников. И убедитесь, что ненавязчивый JavaScript включен в вашем веб -.конфиг (это должно быть по умолчанию):

<add key="UnobtrusiveJavaScriptEnabled" value="true" />

У меня была точно такая же проблема как Leniel. Я попробовал исправления, предложенные здесь и в дюжине других мест. То, что наконец сработало для меня, просто добавило

@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")

к моему макету...


если вы делаете это с @Html.ActionLink() затем загрузка PartialView обрабатывается как обычный запрос при нажатии на элемент привязки, т. е. загрузка новой страницы с ответом метода PartialViewResult.
если вы хотите загрузить его immedialty, то вы используете @Html.RenderPartial("_LoadView") или @Html.RenderAction("Load").
если вы хотите сделать это при userinteraction (т. е. нажав на ссылку), вам нужно использовать AJAX --> @Ajax.ActionLink()


для меня это сработало после того, как я загрузил ненавязчивую библиотеку AJAX через NuGet:

 Search and install via NuGet Packages:   Microsoft.jQuery.Unobtrusive.Ajax

чем добавить в представление ссылки на jQuery и AJAX ненавязчиво:

@Scripts.Render("~/bundles/jquery")
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"> </script>

следующий Ajax actionlink панели и div мы хотели бы представить результаты:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

<div id="toUpdate"></div>

небольшой твик к выше

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

<div id="toUpdate"></div>

RenderParital лучше использовать для производительности.

{@Html.RenderPartial("_LoadView");}

если вы хотите заполнить содержимое вашего частичного представления внутри вашего представления, вы можете использовать

@Html.Partial("PartialViewName")

или

{@Html.RenderPartial("PartialViewName");}

если вы хотите сделать запрос сервера и обработать данные, а затем вернуть частичный вид вам основной вид, заполненный этими данными, которые вы можете использовать

...
    @Html.Action("Load", "Home")
...

public PartialViewResult Load()
{
    return PartialView("_LoadView");
}

если вы хотите, чтобы пользователь нажал на ссылку, а затем заполнить данные частичного просмотра вы можете использовать:

@Ajax.ActionLink(
    "Click Here to Load the Partial View", 
    "ActionName", 
    "ControlerName",
    null, 
    new AjaxOptions { UpdateTargetId = "toUpdate" }
)

ОДНА ВЕЩЬ, ЧТОБЫ БЫТЬ В КУРСЕ - И Я УПАЛ В ГРЯЗЬ ОТ ЭТОГО...

jquery.validate.unobtrusive.js
jquery.validate.unobtrusive.min.js

НЕ СОВПАДАЮТ...

jquery.unobtrusive-ajax.js
jquery.unobtrusive-ajax.min.js

Я прочитал "ненавязчивый" и предположил, что у меня есть правильная библиотека - требуются AJAX!