2

私は umbraco mvc Web サイトを開発していますが、サーフェス コントローラー内で現在のページ情報を取得するのに問題があります。

これが私のシナリオです:

商品ページがあります。また、製品リストをフィルタリングするチェックボックスがあります。チェックボックスの変更イベントで起動する ajax ポスト関数を作成しました。

$.ajax({
            type: "POST",
            url: '/umbraco/Surface/ProductsSurface/Products',
            data: JSON.stringify({ some data }),
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            traditional: true,
            cache: false,
            beforeSend: function () {
                $("#imgAjaxLoader").css("display", "inline");
            },
            complete: function () {
                $("#imgAjaxLoader").css("display", "none");
            },
            success: function (data) {
                if (data.Status != null) {                        
                } else {
                }
            }
        });

私が欲しいのは、製品リストをフィルタリングし、製品リストを再現し、このデータをテンプレートページに送信し、このページを製品リストでレンダリングし、レンダリングされたページ文字列を取得し、この文字列を Json でページに返すことです。

これは私のレンダーカミソリビューメソッドです:

public string RenderRazorViewToString(string viewName, object model)
    {
        ViewData.Model = model;
        using (var sw = new StringWriter())
        {
            var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
            var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
            viewResult.View.Render(viewContext, sw);
            viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
            return sw.GetStringBuilder().ToString();
        }
    }

しかし問題は、テンプレート ページが umbraco から継承されていなくても、レンダリング モデルから継承されたモデルが必要なことです。だから私はそれを継承しました。

これは私のモデルです:

public class ProductListTemplateViewModel : RenderModel
{
    //Some Properties

    public ProductListTemplateViewModel() : this(new UmbracoHelper(UmbracoContext.Current).TypedContent(UmbracoContext.Current.PageId)) { }
    public ProductListTemplateViewModel(IPublishedContent content, CultureInfo culture) : base(content, culture) { }
    public ProductListTemplateViewModel(IPublishedContent content) : base(content) { }
}

しかし、それを行ってページをレンダリングした後、エラーが表示されましたValue Cannot Be NULL

これは、IPublishedContent コンテンツ オブジェクトが null であるため、この値をビュー モデルにバインドする必要があるためです。

IPublishedContent iPublishedContent = CurrentPage;

このコードを実行している間は何も起こりません。次のコードを実行していません。そこでフリーズし、無限ループに陥ります。

だから私は価値を得ることができません。エラーなしで何も起こりません。

私は今必死です。どんな助けでも素晴らしいでしょう。

ありがとう。

4

0 に答える 0