2

PartialView のコンテンツを返したい ASP.Net MVC JsonResult 関数があります (コンテンツは Ajax を使用してロードする必要があり、何らかの理由で PartialViewResult を返すことができません)。

PartialView をレンダリングするには、ViewContext オブジェクトが必要です。

Action メソッド内で現在の ViewContext オブジェクトを取得するにはどうすればよいですか? アクションメソッドに HttpContext.Current さえ表示されません。

ASP.net MVC 1 を使用しています。

4

2 に答える 2

4

ViewContext は、後でビューをレンダリングする前に構築されるため、アクション メソッド内では使用できません。MVContrib の BlockRendererを使用して、部分ビューの内容を文字列にレンダリングすることをお勧めします。

于 2010-01-07T08:36:36.557 に答える
0

どこかでポイントを見逃しているかもしれませんが、部分的なビューを返すアクションは、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);
    }

それは役に立ちますか?そうでない場合は、何か不足しているため、作業中のコードの一部を投稿できます。

于 2010-01-07T08:34:05.693 に答える