我正在开发一个 umbraco mvc 网站,但我无法在表面控制器中获取当前页面信息。
这是我的场景:
我有一个产品页面。并且有过滤产品列表的复选框。我写了一个 ajax post 函数,它在复选框更改事件时触发。
$.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 内容对象为空,所以我必须将此值绑定到我的视图模型。
IPublishedContent iPublishedContent = CurrentPage;
在执行此代码时,什么也没有发生,它不会执行下一个代码。它就像冻结在那里,进入一个无限循环。
所以我无法获得价值。没有发生任何错误。
我现在很绝望。任何帮助都会很棒。
谢谢。