Как вызвать частичный просмотр через ajax в mvc3

Мне нужно вызвать частичное представление через ajax. Я пробовал следующее, но я не уверен, как это сделать.

$("#UserName").change(function () {
        var userid = $("#UserName").val();
        var ProvincialStateID = $("#State").val();
        var Hobbyid = $("#Hobby").val();
        var Districtid = $("#DistrictNames").val();
        var Homeid = $("#Hobbyhome_EstablishmentId").val();
        var urlperson = '@Url.Action("FetchPersonByUserName")';
        $.ajax({
            type: "POST",
            url: urlperson,
            data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
            success: function (data) { 
           //Dont know what to write here
        });
    });

Вот функция, которую я написал в своем контроллере:

 [HttpPost]
    public ActionResult FetchPersonByUserName(int userid,int stateid,int districtid,int homeid,int Hobbyid)
    {
      //Code to fetch the data in the partial using all parameters
      return PartialView("_LearnerAssociationGridPartial", list);
    }

Когда я нажимаю раскрывающийся список, вызывается ajax, и я хочу, чтобы функция, вызываемая через ajax, перенаправляла ее в частичное представление. Пожалуйста, помогите мне, потому что в настоящее время я не могу отобразить свое частичное представление


person MVC_Nhibernate    schedule 03.05.2012    source источник
comment
возможный дубликат Как вызвать частичное представление через ajax в MVC3   -  person nemesv    schedule 03.05.2012
comment
Это точная копия, тот же код и все остальное   -  person glosrob    schedule 03.05.2012
comment
[Этот пост][1], скорее всего, ответит на ваш вопрос.. [1]: stackoverflow.com/questions/5248183/   -  person Sameer Anand    schedule 03.05.2012


Ответы (2)


Вам нужно что-то вроде

$.ajax({
   type: "POST",
   url: urlperson,
   data: { userid: userid, 
           stateid: ProvincialStateID, 
           hobbyid: Hobbyid, 
           districtid: Districtid, 
           homeid: Homeid },
    success: function (data) { 
          var result = data; 
          $('targetLocation').html(result);
    }
   });

не рекомендуется использовать данные прямо из переменной, но вы можете. Теперь целевое местоположение — это место, где вы хотите отобразить результат.

Смотрите больше информации здесь:

http://api.jquery.com/jQuery.ajax/

Что касается медленной выборки данных, попробуйте оптимизировать запрос.

Обновление Если nhibernate работает медленно, попробуйте http://www.hibernatingrhinos.com/products/nhprof, который является профилировщиком nhibernate, для платной версии, или попробуйте профайлер sql, чтобы увидеть, какой запрос выполняется, часто вы можете получить гораздо больше, чем вы ожидаете, или очень медленный запрос из-за сложности запроса.

person cpoDesign    schedule 03.05.2012
comment
я сделал это, как вы предложили, но не могли бы вы сказать мне, что я должен написать в функции контроллера (urlperson) - person MVC_Nhibernate; 03.05.2012
comment
@MVC_Nhibernate не уверен, что ты имеешь в виду? - person cpoDesign; 03.05.2012
comment
Спасибо, это работало только потому, что данные загружались медленно - person MVC_Nhibernate; 04.05.2012

Я не понимаю, что вы подразумеваете под перенаправлением на частичное представление. Обычно люди используют ajax и частичные представления, чтобы получить часть страницы без обновления страницы (вы могли видеть такое поведение на этом сайте/facebook/twitter и т. д.). Так что я думаю, вы, вероятно, хотите показать данные, которые вы извлекаете асинхронно для отображения в части вашей текущей страницы. вы можете сделать это в своем обработчике успеха

$.ajax({
        type: "POST",
        url: urlperson,
        data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
        success: function (data) { 
          $("#divUserInfo".html(data);
        }
 });

Предположим, у вас есть div с идентификатором divUserInfo на текущей странице.

Если вы действительно хотите перенаправить после сообщения ajax, вы можете сделать это следующим образом.

$.ajax({
        type: "POST",
        url: urlperson,
        data: { userid: userid, stateid: ProvincialStateID, hobbyid: Hobbyid, districtid: Districtid, homeid: Homeid },
        success: function (data) { 
          window.location.href="Why-I-need-Ajax-Then.php";
        }
 });

Лично я не использую HttpPost (как в клиенте, так и на сервере) Если это метод для GET некоторых данных. Я просто использую jquery get или load.

$.get("yourUrl", { userid: userid, stateid: ProvincialStateID } ,function(data){
  $("#divUserInfo".html(data);
});
person Shyju    schedule 03.05.2012
comment
Я сделал то, что вы предложили в первой функции ajax, и я именно это ищу, но можете ли вы сказать, что мне написать в функции контроллера, или я должен оставить все как есть? - person MVC_Nhibernate; 03.05.2012
comment
@MVC_Nhibernate: я не знаю, что вы хотите делать в своем контроллере. Если вы хотите изменить способ POST на способ GET для получения некоторой информации (например, GetUser), просто уберите глагол [HttpPost] над именем метода. По умолчанию это метод GET. Помните, что ни один из вызовов HttpPost больше не может получить доступ к этому методу (как из ajax, так и из обычной формы). - person Shyju; 03.05.2012