Pobierz bieżący ViewContext w ASP.Net MVC


Mam funkcję ASP.Net MVC JsonResult, w której chcę zwrócić zawartość PartialView (zawartość musi być załadowana za pomocą Ajax iz jakiegoś powodu nie mogę zwrócić PartialViewResult).
Aby renderować PartialView, potrzebuję obiektu ViewContext.
Jak uzyskać bieżący obiekt ViewContext w metodzie akcji? Nie widzę nawet HttpContext.Current w mojej metodzie akcji.
Używam ASP.net MVC 1.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

ViewContext nie jest dostępny w metodzie akcji, ponieważ jest tworzony później przed renderowaniem widoku. Sugerowałbym użycie

MVCContrib BlockRenderer
http://www.brightmix.com/blog/ ... -mvc/
aby wyrenderować zawartość częściowego widoku na ciąg.
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Mogłem gdzieś przeoczyć punkt, ale moje działania zwracające częściowe widoki robią to, zwracając obiekt widoku, który łączy się ze stroną ascx. Spowoduje to zwrócenie częściowego kodu HTML bez pełnych konstrukcji strony (html, head, body itp.). Nie wiesz, dlaczego chcesz zrobić więcej, czy istnieje konkretny powód, dla którego musisz zwrócić PartialViewResult? Oto przykład z mojego działającego kodu.
Najpierw akcja w moim kontrolerze:
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);
}

A potem częściowy widok (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) %>
<%} %>

Na koniec Jquery, które konfiguruje wywołanie:
$(function() {
$(".letterSelector").click(function() {
$("#principleList").load("/GetPrincipleList/" + $(this).attr("title"), null, setListClicks);
});
});

Tak więc pełny proces AJAX, mam nadzieję, że to pomoże.
---- ZAKTUALIZUJ następny komentarz ----
Zwracanie danych Json jest równie proste:
Po pierwsze, wyzwalanie połączenia AJAX po zmianie pola wyboru:
$("#users").change(function() {
var url = "/Series/GetUserInfo/" + $("#users option:selected").attr("value");
$.post(url, null, function(data) { UpdateDisplay(data); }, 'json');
});

javascript obsługujący zwrócone dane 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();
}
};

I wreszcie sama akcja, która zwraca dane 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);
}

Czy to pomoże? Jeśli nie, czy mógłbyś opublikować część kodu, nad którym pracujesz, ponieważ czegoś mi brakuje.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się