我有一个 ASP.Net MVC JsonResult 函数,我想在其中返回 PartialView 的内容(必须使用 Ajax 加载内容,并且由于某种原因我无法返回 PartialViewResult)。
要呈现 PartialView,我需要 ViewContext 对象。
如何在 Action 方法中获取当前 ViewContext 对象?我什至没有在我的操作方法中看到 HttpContext.Current 。
我正在使用 ASP.net MVC 1。
我有一个 ASP.Net MVC JsonResult 函数,我想在其中返回 PartialView 的内容(必须使用 Ajax 加载内容,并且由于某种原因我无法返回 PartialViewResult)。
要呈现 PartialView,我需要 ViewContext 对象。
如何在 Action 方法中获取当前 ViewContext 对象?我什至没有在我的操作方法中看到 HttpContext.Current 。
我正在使用 ASP.net MVC 1。
ViewContext 在 action 方法中不可用,因为它是在渲染视图之前稍后构造的。我建议您使用MVCContrib 的 BlockRenderer将部分视图的内容呈现为字符串。
我可能在某处遗漏了一点,但我返回部分视图的操作是通过返回一个引用 ascx 页面的 View 对象来实现的。这将返回没有完整页面结构(html、head、body 等)的部分 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 进程,希望对您有所帮助。
----更新以下评论----
返回 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();
}
};
最后是返回 json 数据的 Action 本身:
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);
}
这有帮助吗?如果没有,那么您可以发布一些您正在处理的代码,因为我缺少一些东西。