#asp.net #ajax #asp.net-mvc-3
#asp.net #ajax #asp.net-mvc-3
Вопрос:
Когда я нажимаю на Ajax.ActionLink дважды вызывает мой контроллер.
<td id = @tdTag>
@Ajax.ActionLink("LL-" item.getProjectAbbreviation(item.projectID.Value) "-" item.prjLessonID, "Details",
new { id = item.lessonID },
new AjaxOptions
{
HttpMethod = "POST",
UpdateTargetId = "details",
InsertionMode = InsertionMode.InsertAfter ,
OnSuccess = "showDetails()"
})
Мой контроллер выглядит следующим образом…
public ActionResult Details(int id)
{
using (LLDataContext storeDB = new LLDataContext())
{
var lesson = (from l in storeDB.lessons
where l.lessonID == id
select l).SingleOrDefault();
return PartialView(lesson);
}
}
Комментарии:
1. Можете ли вы предоставить реализацию метода showDetails на javascript?
Ответ №1:
Я только что столкнулся с этой же проблемой и обнаружил, что у меня «jquery.unobtrusive-ajax.js » загружено дважды. Я удалил второй экземпляр, и все работает хорошо. Чтобы увидеть это в действии, просто добавьте это три раза и создайте @Ajax.ActionLink(…) с опцией подтверждения ajax. Вы получите подтверждение несколько раз.
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
Комментарии:
1. Большое вам спасибо за ваше решение, сэкономьте мне много времени.
2. Да, это была проблема! (В моем случае обновление ajax страницы повторно включало этот js-файл при каждом запуске обновления. Переместил включение за пределы html, возвращаемого этим вызовом ajax, и проблема исчезла.)
3. Если вы используете пакеты, и вы включили проверку с помощью следующего кода: пакеты. Добавить(новый ScriptBundle(«~/bundles/jqueryval»). Включить(«~/Scripts/jquery.unobtrusive*», «~/Scripts/jquery.validate *»)); Это может вызвать аналогичное поведение, укажите js без *
4. Супер, сэкономил много времени!, да, он был загружен два раза, и теперь проблема исчезла !….
5. @anAgent Это не решает мою проблему, но дает мне подсказку, как решить мою проблему. Спасибо!
Ответ №2:
используйте любой из только одного js, а не оба
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")"></script>
или
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")"></script>
Это решит ваши проблемы.
Ответ №3:
Ответ anAgent помог мне решить эту проблему, но в качестве дополнения я упомяну, что в моем случае множественные ссылки на «jquery.unobtrusive-ajax.js «были в разных файлах; один был в MyView.cshtml, а другой был в _Layout.cshtml.
Ответ №4:
Убедитесь, что вы включили на свою страницу ненавязчивый скрипт jquery (в дополнение к jquery):
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
и что вы включили ненавязчивый javascript в своем web.config
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
Также для дальнейшей диагностики таких проблем я бы порекомендовал вам использовать какой-нибудь инструмент, который позволил бы вам точно видеть, что происходит на уровне HTTP. FireBug более чем превосходен для такого рода анализа. Он также покажет любые возможные ошибки javascript, которые у вас могут быть, он покажет или нет AJAX-запросы, которые предоставят вам дополнительную информацию о том, выполняется AJAX-запрос или обычный запрос, … полезные вещи.
Комментарии:
1. @crocaduck81, ты видишь запрос AJAX, отправленный в FireBug?
2. Я делаю, он отправляет запрос дважды.
Ответ №5:
просто проверьте эту ссылку на jquery
src="~/Scripts/jquery.unobtrusive-ajax.min.js"
может быть, вы добавляете в представление дважды
или
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",