私は 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;
このコードを実行している間は何も起こりません。次のコードを実行していません。そこでフリーズし、無限ループに陥ります。
だから私は価値を得ることができません。エラーなしで何も起こりません。
私は今必死です。どんな助けでも素晴らしいでしょう。
ありがとう。