Загрузите представление, используя AJAX в ASP.NET 3 RAZR - PullRequest
0 голосов
/ 29 сентября 2011

При использовании MVC вы вызываете действия, которые затем загружают представление и родительский макет / мастер-страницу.Если вы хотите загрузить представление с использованием AJAX, а затем вставить этот контент, скажем, в div с идентификатором контента, вы в конечном итоге загрузите весь макет и прочее, а также просто вызовите действие.

Как мне обойти это?Можно ли как-то сказать, что если вызывать это действие с помощью AJAX, не беспокоиться о компоновке, а просто пихать представление внутри div?

Любые примеры кода будут высоко оценены.Спасибо

Ответы [ 3 ]

1 голос
/ 29 сентября 2011

запрос ajax

$.ajax({
   url: '/controller/action',
   type:'POST',
   success:function(data){ // data will contain the html rendered by partial view
     $('#someDivID').html(data);  
   }
  });

ваш ActionResult будет выглядеть как

public ActionResult ActionName()
{
//some code 
return PartialView();
 //or
 // return View();
}
0 голосов
/ 29 сентября 2011

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

Метод 'RenderPartialViewToString' преобразует представление в строку:

    public static string RenderPartialViewToString<T>(
        ControllerContext context,
        string partialViewName,
        T model,
        TempDataDictionary tempData)
    {
        ViewEngineResult result = ViewEngines.Engines.FindPartialView(context, partialViewName);

        if (result.View != null)
        {
            StringBuilder sb = new StringBuilder();
            using (StringWriter sw = new StringWriter(sb))
            {
                using (HtmlTextWriter output = new HtmlTextWriter(sw))
                {
                    ViewContext viewContext = new ViewContext(context, result.View, new ViewDataDictionary<T>(model), tempData, output);
                    result.View.Render(viewContext, output);
                }
            }

            return sb.ToString();
        }

        return String.Empty;
    }

В вашем действии вызовите метод RenderPartialViewToString:

    public ActionResult ActionName(ActionParameters)
    {
          return Json(RenderPartialViewToString(this.ControllerContext, "ViewName", model, tempDict), JsonRequestBehavior.AllowGet);
    }

В Javascript создайте что-то вроде этого:

$.ajax({
    url: '/controllerName/actionName',
    success:function(result){
        $('div#someID').html(result);  
    }
});
0 голосов
/ 29 сентября 2011

в своем HTML-ответе ajax вы можете выбрать только элементы div или элементы, которые вы хотите отобразить

предположим, что ваши вызовы ajax выглядят так: -

$.ajax(
   url: 'some_url',
   success:function(responseHtml){
     $('.div-on-current-page').html( $(responseHtml).find('.div-inside-response') ); 
   });

просто дайте HTML-ответна jquery $(responseHtml) и выберите нужный контент $(responseHtml).find('.div-inside-response') и установите его на текущей странице div

$('.div-on-current-page').html( $(responseHtml).find('.div-inside-response') );.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...