我有一个ASP.Net MVC JsonResult函数,我想返回一个PartialView的内容(内容必须使用Ajax加载,出于某种原因,我不能返回一个PartialViewResult)。获取当前ViewContext在ASP.Net MVC
要呈现PartialView,我需要ViewContext对象。
如何获取Action方法中的当前ViewContext对象?我甚至在我的操作方法中看不到HttpContext.Current。
我使用ASP.net MVC 1
我有一个ASP.Net MVC JsonResult函数,我想返回一个PartialView的内容(内容必须使用Ajax加载,出于某种原因,我不能返回一个PartialViewResult)。获取当前ViewContext在ASP.Net MVC
要呈现PartialView,我需要ViewContext对象。
如何获取Action方法中的当前ViewContext对象?我甚至在我的操作方法中看不到HttpContext.Current。
我使用ASP.net MVC 1
ViewContext在操作方法中不可用,因为它在渲染视图之前稍后构建。我建议您使用MVCContrib's BlockRenderer将部分视图的内容呈现为字符串。
我可能已经错过了一个点的地方,但我的行为是返回局部视图通过返回指ASCX页面视图对象。这将返回部分HTML没有完整的页面结构(HTML,头,身体等)。不知道为什么你会想要做任何事情之外,是否有一个特定的原因需要返回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');
});
处理返回的json数据的javascript:
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);
}
这有帮助吗?如果没有,那么你可以发布你正在处理的一些代码,因为我错过了一些东西。
Lazarus,我想返回一个JSONResult,因为我通过Ajax返回的数据有一些元素需要在客户端使用Javascript进行处理。我不想为JSon和Partial调用两个单独的函数,所以我想将部分渲染为json val。 – 2010-01-07 08:42:36
JsonResult jsn = Json(new Dictionary
啊!我明白你为什么需要这个。 – Lazarus 2010-01-07 13:29:19
这正是我所需要的。现在试图去实现它的工作。谢谢Darin。 – 2010-01-07 08:41:33
我很明显错过了这个需求,任何人都会友好地给我一个例子,这将是必要的吗? – Lazarus 2010-01-07 09:07:19
http://thriftybliss.spaces.live.com/blog/cns!58DA805F37F31F20!170.entry?wa=wsignin1.0&sa=362921628虽然这对我来说更快更简单。 – 2010-01-08 06:24:41