Как я могу загрузить частичный вид внутри представления
Я очень смущаюсь с этим частичным видом...
Я хочу загрузить частичный вид внутри моего основного вида...
вот простой пример...
Я загружаю Index.cshtml действия индекса Homecontroller как главную страницу.
в index.cshtml Я создаю ссылку через
@Html.ActionLink("load partial view","Load","Home")
в HomeController Я добавляю новое действие под названием
public PartialViewResult Load()
{
return PartialView("_LoadView");
}
in _LoadView.cshmtl Я просто имею
<div>
Welcome !!
</div>
НО, при запуске проекта index.cshtml сначала отображает и показывает мне ссылку "Load Partial View"... когда я нажимаю на нее, она переходит на новую страницу, чтобы сделать приветственное сообщение от _LoadView.cshtml в index.cshtml.
Что может быть неправильным?
Примечание. Я не хочу загружать страницу через AJAX или не хочу использовать Ajax.ActionLink
Ответы
Ответ 1
Если вы хотите загрузить частичный вид непосредственно в главном представлении, вы можете использовать помощник 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 включен в вашем web.config(он должен быть по умолчанию):
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Ответ 2
У меня была такая же проблема, как у Леняля. Я попробовал исправления, предложенные здесь, и еще дюжину других мест. То, что, наконец, сработало для меня, просто добавило
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryval")
в мой макет...
Ответ 3
Если вы делаете это с помощью @Html.ActionLink()
, то загрузка PartialView обрабатывается как обычный запрос при нажатии на элемент привязки, т.е. загружает новую страницу с ответом метода PartialViewResult.
Если вы хотите загрузить его сразу, то вы используете @Html.RenderPartial("_LoadView")
или @Html.RenderAction("Load")
.
Если вы хотите сделать это при взаимодействии с пользователем (то есть нажав ссылку), вам необходимо использовать AJAX → @Ajax.ActionLink()
Ответ 4
Для меня это сработало после того, как я загрузил AJAX Unobtrusive через 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>
Ответ 5
Маленькое tweek к выше
@Ajax.ActionLink(
"Click Here to Load the Partial View",
"ActionName",
"ControlerName",
null,
new AjaxOptions { UpdateTargetId = "toUpdate" }
)
<div id="toUpdate"></div>
Ответ 6
RenderParital лучше использовать для повышения производительности.
{@Html.RenderPartial("_LoadView");}
Ответ 7
если вы хотите заполнить содержимое частичного представления внутри своего представления, вы можете использовать
@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" }
)
Ответ 8
ОДНА ВЕЩЬ, ЧТОБЫ ОЗНАКОМИТЬСЯ - И Я СДЕЛАЛ ЭТО ЭТО...
jquery.validate.unobtrusive.js
jquery.validate.unobtrusive.min.js
НЕ ЯВЛЯЕТСЯ ТОЛЬКО КАК...
jquery.unobtrusive-ajax.js
jquery.unobtrusive-ajax.min.js
Я прочитал "ненавязчивый" и предположил, что у меня есть правильная библиотека - нужны AJAX!