2010-01-07 4 views
2

У меня есть функция ASP.Net MVC JsonResult, в которой я хочу вернуть содержимое PartialView (содержимое должно быть загружено с использованием Ajax, и по какой-то причине я не могу верните PartialViewResult).Получить текущий ViewContext в ASP.Net MVC

Для визуализации PartialView мне нужен объект ViewContext.

Как вы можете получить текущий объект ViewContext в методе Action? Я даже не вижу HttpContext.Current в моем методе действий.

Я использую ASP.NET MVC 1.

ответ

4

ViewContext недоступен в методе действий, потому что он построен позже перед визуализацией представления. Я предлагаю вам использовать MVCContrib's BlockRenderer, чтобы отобразить содержимое частичного представления в строку.

+0

Это именно то, что мне нужно. Теперь пытаясь заставить его работать. Спасибо Дарин. –

+0

Я, очевидно, не нуждаюсь в этом, будет ли кто-нибудь добрым, чтобы дать мне пример того, где это необходимо? – Lazarus

+0

http://thriftybliss.spaces.live.com/blog/cns!58DA805F37F31F20!170.entry?wa=wsignin1.0&sa=362921628 Это было быстрее и легче для меня. –

0

я, возможно, пропустил точку где-то, но мои действия, вернувшиеся частичный вид сделать так, возвращая объект View, который ссылается на страницу ASCX. Это вернет частичный HTML без полных конструкций страницы (html, head, body и т. Д.). Не знаете, почему вы хотите сделать что-либо помимо этого, есть ли конкретная причина, по которой вам нужно вернуть PartialViewResult? Вот пример из моего рабочего кода.

Сначала действие в мой контроллер:

public ViewResult GetPrincipleList(string id) 
    { 
     if (id.Length > 1) 
      id = id.Substring(0, 1); 
     var Principles = competitorRepository.Principles.Where(p => p.NaturalKey.StartsWith(id)).Select(p=>p); 
     return View(Principles); 
    } 

И тогда частичный вид (ASCX):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<MyProject.Data.Principle>>" %> 
    <% foreach (var item in Model) { %> 
<div class="principleTitle" title="<%= Html.Encode(item.NaturalKey) %>"><%= Html.Encode(item.Title) %></div> 
<%} %> 

Наконец, Jquery, который устанавливает вызов:

$(function() { 
     $(".letterSelector").click(function() { 
      $("#principleList").load("/GetPrincipleList/" + $(this).attr("title"), null, setListClicks); 
     }); 
    }); 

Итак, полный процесс AJAX, надеюсь, что это поможет.

---- UPDATE следующий комментарий ----

Возвращение данных JSon так же просто:

Во-первых, инициирование вызова AJAX, когда выберите изменения окно:

$("#users").change(function() { 
     var url = "/Series/GetUserInfo/" + $("#users option:selected").attr("value"); 
     $.post(url, null, function(data) { UpdateDisplay(data); }, 'json'); 
    }); 

Javascript, обрабатывающий возвращенные данные json:

function UpdateDisplay(data) { 
    if (data != null) { 
     $("div.Message").fadeOut("slow", function() { $("div.Message").remove(); }); 
     $("#Firstname").val(data.Firstname); 
     $("#Lastname").val(data.Lastname); 
     $("#List").val(data.List); 
     $("#Biography").val(data.Biography); 
     if (data.ImageID == null) { 
      $("#Photo").attr({ src: "/Content/Images/nophoto.png" }); 
      $("#ImageID").val(""); 
     } 
     else { 
      if (data.Image.OnDisk) { 
       $("#Photo").attr({ src: data.Image.ImagePath }); 
      } 
      else { 
       $("#Photo").attr({ src: "/Series/GetImage?ImageID=" + data.ImageID }); 
      } 
      $("#ImageID").val(data.ImageID); 
     } 
     $("form[action*='UpdateUser']").show(); 
    } else { 
     $("form[action*='UpdateUser']").hide(); 
    } 
}; 

И, наконец, A который возвращает данные json:

public JsonResult GetUserInfo(Guid id) 
    { 
     MyUser myuser = (from u in seriesRepository.Users 
         where u.LoginID == id 
         select u).FirstOrDefault(); 
     if (myuser == null) 
     { 
      myuser = new MyUser(); 
      myuser.UserID = 0; 
      myuser.Firstname = Membership.GetUser(id).UserName; 
      myuser.Lastname = ""; 
      myuser.List = ""; 
      myuser.Biography = "No yet completed"; 
      myuser.LoginID = id; 
     } 
     return Json(myuser); 
    } 

Помогло ли это? Если нет, вы можете опубликовать часть кода, над которым работаете, поскольку я что-то упускаю.

+0

Lazarus, я хочу вернуть JSONResult, потому что данные, которые я возвращаю через Ajax, имеют некоторые элементы, которые необходимо обработать с помощью Javascript на стороне клиента. Я не хочу вызывать две отдельные функции для JSon и Partial, поэтому я хочу отобразить частичное как json val. –

+1

JsonResult jsn = Json (новый словарь {{success ", true}, {" lastPID ", posts [0] .ID}, {" content ", Globals.RenderPartialToString (" ~/Views /Partial/Posts.ascx",ViewData, that.ControllerContext,TempData)}}); –

+0

Ах! Я понимаю, зачем вам это нужно. – Lazarus