#c# #jquery #ajax #asp.net-mvc #razor
#c# #jquery #ajax #asp.net-mvc #razor
Вопрос:
Я столкнулся с проблемой с отображением PartialView в моем веб-приложении. То, что я пытаюсь сделать, это использовать @Ajax.ActionLink() для заполнения div при нажатии кнопки / ссылки содержимым другого представления. Проблема, с которой я сталкиваюсь, заключается в том, что вместо заполнения div он перезагружает содержимое на новую страницу, а не заполняет div. Все другие ответы, которые я просмотрел, говорят то же самое, и мой синтаксис практически такой же. Есть ли что-то среднее, что я пропустил или что я должен был знать, прежде чем я начал пытаться это сделать?
Вот моя ссылка на действие
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar">Hei</span>
<span class="icon-bar">På</span>
<span class="icon-bar">Deg</span>
</button>
</div>
<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
</ul>
</div>
<div>
@Ajax.ActionLink("Last inn partial view", "_LoadView", new AjaxOptions { InsertionMode = InsertionMode.Replace, HttpMethod = "get", UpdateTargetId="result"})
</div>
</div>
</div>
<div class="container body-content">
@RenderBody()
<hr />
<footer>
<p>amp;copy; @DateTime.Now.Year - My ASP.NET Application</p>
</footer>
</div>
@Scripts.Render("~/bundles/ajax");
Вот раздел, который я хочу заполнить
<div class="content">
<div class="content background">
<div id="result">Her står det masse text</div>
</div>
</div>
</div>
Вот контроллер
[HttpGet]
public PartialViewResult _LoadView()
{
return PartialView();
}
Редактировать:
Забыл упомянуть, что у меня настроен BundleConfig.cs, и я убедился, что он работает, поскольку я визуализирую свой css через него, хотя это первый скрипт, который я попробовал.
public static void RegisterBundles(BundleCollection bundles)
{
bundles.Add(new ScriptBundle("~/bundles/jquery").Include("~/scripts/jquery-{version}.js"));
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/scripts/jquery.validate*"));
bundles.Add(new ScriptBundle("~/bundles/modernizr").Include("~/scripts/modernizr-*"));
bundles.Add(new ScriptBundle("~/bundles/bootstrap").Include("~/scripts/bootstrap.js"));
bundles.Add(new ScriptBundle("~/bundles/ajax").Include("~/scripts/jquery.unobtrusive-ajax.js", "~/scripts/jquery.unobtrusive-ajax.min.js"));
bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/bootstrap.css", "~/Content/bootstrap-theme.css", "~/Content/bankstyle.css"));
}
}
РЕДАКТИРОВАТЬ: добавлен текст к вопросу, чтобы сделать его более понятным, выделен жирным шрифтом, чтобы сделать его понятным. Я очень открыт для альтернативных решений
РЕДАКТИРОВАТЬ: Понял, что я действительно искал, это модальный фреймворк в bootstrap. Спасибо за предложения
Комментарии:
1. устанавливаете ли вы ненавязчивый jquery?
2.
Ajax.ActionLink
генерирует стандартную ссылку привязки и немного JavaScript, чтобы перехватить ее для обработки запроса через AJAX, а не поведение по умолчанию при изменении представления. Если происходит поведение по умолчанию, это означает, что JavaScript не запускается, что указывает на наличие какой-то ошибки на странице.3. Хорошее описание, @ChrisPratt
4. Рассмотрено использование @html. Действие? будет вызывать действие при загрузке страницы и возвращать представление
5. @Ra3IDeN Ему явно не нужна ссылка, он хочет частичную загрузку представления внутри элемента в его представлении с использованием помощников html.
Ответ №1:
Пожалуйста, запустите это в консоли:
PM> Install-Package Microsoft.jQuery.Unobtrusive.Ajax -Version 3.2.2
Для установки, пожалуйста, выполните следующие шаги:https://www.nuget.org/packages/Microsoft.jQuery .Ненавязчивый.Ajax/
Затем вы должны использовать файл сценария, который находится в папке Scripts
Ответ №2:
Установите ненавязчивый js-файл:
Запуск в nuget: Install-Package Microsoft.jQuery.Unobtrusive.Ajax
Добавьте это в свой вид:
@Scripts.Render("~/Scripts/jquery.unobtrusive-ajax.min.js")
Комментарии:
1. спасибо, забыл упомянуть, что у меня есть bundleconfig, загружающий мои скрипты
Ответ №3:
Это не ответ на исходный вопрос, а альтернативное решение:
использование html.action
<div id="contentContainer">
@Html.Action("Action", "Controller")
</div>
Это вызовет действие и отобразит представление, которое вы возвращаете из действия.
Ответ №4:
Выяснилось, что я действительно искал модальную структуру в bootstrap. Исправлены мои проблемы за 5 минут.