2013-05-15 4 views
1

Я хотел иметь гиперссылку, которая при нажатии открывается на той же странице, без обновления полной страницы, а не открытия другой ссылки. В моем контроллере я следующая функцияПочему if (Request.IsAjaxRequest) является ложным

public ActionResult PrivacyPolicy() 
{ 
    if (Request.IsAjaxRequest()) 
    { 
     return PartialView(); 
    } 
     return View(); 
} 

, когда я запустить программу и вставить точку останова в return view(); Я понимаю, что моя программа всегда возвращает view() вместо PartialView();

вот index.cshtml код

@section head{ 

    <script type="text/javascript" 
      src="@Url.Content("~/scripts/AjaxDemo.js")"></script> 
} 
@Html.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"}) 

<div id="privacy"></div> 

в частичном виде PrivacyPolicy У меня всего несколько текстов.

и AjaxDemo.js выглядит следующим образом

$(document).ready(function() { 
    $('#privacyLink').click(function (event) { 
     event.preventDefault(); 
     var url = $(this).attr('href'); 
     $('#privacy').load(url); 
    }); 
}); 

почему моя программа не возвращать частичный вид? или почему он не принимает запрос ajax? Должна ли моя программа открывать ссылку на той же странице индекса (CustomAjax), если включен javascript в моем браузере?

+0

См. Следующие сообщения: http: // stackoverflow.com/вопросы/5164540/why-doesnt-request-isajaxrequest-work-in-asp-net-mvc-3 http://stackoverflow.com/questions/9607164/request-isajaxrequest-never-returns-true-in-mvc3 – gideon

+0

Они действительно не решают мою проблему. Но в любом случае спасибо. – Cybercop

ответ

0

IIRC event - зарезервированное слово. Попробуйте так:

$('#privacyLink').click(function (e) { 
    e.preventDefault(); 
    var url = $(this).attr('href'); 
    $('#privacy').load(url); 
}); 

или:

$('#privacyLink').click(function() { 
    var url = $(this).attr('href'); 
    $('#privacy').load(url); 
    return false; 
}); 

Также не забудьте включить jquery.js до того вашего AjaxDemo.js сценария.

+0

Я попробовал первый вариант, который вы упомянули. и включал '@section head { }' но все же на гиперссылке нажмите, чтобы перейти на новую страницу. – Cybercop

+0

Убедитесь, что jQuery не включен дважды и что вы не имеют ошибок javascript. Посмотрите на свою консоль javascript в браузере, а также на вкладку «Сеть», чтобы убедиться, что все ваши сценарии включены правильно. Это должно сработать. –

+0

Спасибо большое, ну, теперь я получил некоторую ошибку на моем AjaxDemo.js, который показан консолью javascript. Он говорит, что неверная ссылка: $ не определена чуть ниже строки '$ ('# privacyLink'). Click (function (e) {'. Любая идея, почему я получаю эту ошибку? – Cybercop

2

Если вы выполняете загрузку jQuery, он фактически выполнит обычный запрос и затем загрузит полученные данные внутри данного элемента.

Вы должны удалить пользовательский JavaScript код, использовать встроенный в Ajax хелперов и указать updateTargetID в AjaxOptions:

@Ajax.ActionLink("Show the Privacy Policy", "PrivacyPolicy", null, new{id="privacyLink"}, new AjaxOptions {UpdateTargetId = "privacy"}) 

    <div id="privacy"></div> 

EDIT: Добавление больше информации о IsAjaxRequest():

Когда вы делаете запрос Ajax, вы должны установить HTTP-заголовок X-Requested-With на XMLHttpRequest'. Internally,. IsAjaxRequest проверяет наличие этого заголовка.

Если вы используете jQuery.Ajax или по умолчанию Ajax-помощники, этот заголовок будет включен. Если вы используете jQuery.load(), этот заголовок не включен. jQuery.load не позволяет настраивать настраиваемые заголовки.

Редактировать Для того, чтобы использовать Ajax.ActionLink вам необходимо включить ненавязчивую библиотеку Ajax и включить его в web.config:

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

В дополнение к установке флага, вам также потребуется включить плагин MVC для ненавязчивого Ajax с jQuery (~/Scripts/jquery.unobtrusive-ajax.js).

+0

Я заменил свой '@Html.ActionLink' на' @ Ajax.ActionLink', как вы упомянули. Теперь мне требуется эта ссылка http: // localhost: 19208/customajax/PrivacyPolicy/privacyLink, когда я нажимаю на ссылку «Политика конфиденциальности». Что делать, чтобы удостовериться, что при нажатии гиперссылки это делается как запрос Ajax и открывается частичный вид, а не весь вид. Как отредактировать часть вашего ответа, как мне установить x-запрошено внутри? – Cybercop

+0

Вы не можете добавлять заголовки с помощью jQuery.load. Я добавил информацию о том, как включить ненавязчивый Ajax – Kenneth

Смежные вопросы