代码之家  ›  专栏  ›  技术社区  ›  Cyril Gupta

获取ASP.NET MVC中的当前视图上下文

  •  2
  • Cyril Gupta  · 技术社区  · 15 年前

    我有一个asp.net mvc jsonresult函数,在该函数中,我想返回partialview的内容(必须使用Ajax加载内容,出于某种原因,我不能返回partialview结果)。

    要呈现partialView,我需要viewContext对象。

    如何在action方法中获取当前的viewContext对象?我的action方法中甚至没有看到httpContext.current。

    我正在使用ASP.NET MVC 1。

    2 回复  |  直到 15 年前
        1
  •  4
  •   Darin Dimitrov    15 年前

    在Action方法中,ViewContext不可用,因为它是在稍后呈现视图之前构造的。我建议你用 MVCContrib's BlockRenderer 将局部视图的内容呈现为字符串。

        2
  •  0
  •   Lazarus    15 年前

    我可能在某个地方漏掉了一点,但是我返回部分视图的操作是通过返回一个引用ascx页面的视图对象来完成的。这将返回不带整页结构(HTML、头、正文等)的部分HTML。不知道为什么你要做更多的事情,有没有一个具体的原因你需要返回partialView结果?下面是我的工作代码中的一个例子。

    首先,我的控制器中的操作:

        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数据的操作本身:

        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);
        }
    

    有帮助吗?如果没有,那么你可以发布一些你正在处理的代码,因为我遗漏了一些东西。

    推荐文章