在ASP.NET MVC中的JSON属性中返回呈现的HTML部分

我一直很高兴从ASP.NET中的控制器返回JsonResult对象或部分ASP.NET视图。

我想将呈现的部分视图作为JSON对象的属性返回。例如

要求

/post/detail/1

会回来

{"PostId": 1, "Html": "<p>some markup rendered from a partial to inject</p>" }

当我使用JavaScript处理响应时,这将使我知道PostId。有关最佳方法的任何提示?

回答:

这是一些将起作用的代码,因为我今天需要这样做。原始代码在这里描述。

public static string RenderPartialToString(string controlName, object viewData)

{

var viewContext = new ViewContext();

var urlHelper = new UrlHelper(viewContext.RequestContext);

var viewDataDictionary = new ViewDataDictionary(viewData);

var viewPage = new ViewPage

{

ViewData = viewDataDictionary,

ViewContext = viewContext,

Url = urlHelper

};

var control = viewPage.LoadControl(controlName);

viewPage.Controls.Add(control);

var sb = new StringBuilder();

using (var sw = new StringWriter(sb))

using (var tw = new HtmlTextWriter(sw))

{

viewPage.RenderControl(tw);

}

return sb.ToString();

}

然后,您可以使用它来执行RJS样式的json结果

public virtual ActionResult Index()

{

var jsonResult = new JsonResult

{

Data = new

{

main_content = RenderPartialToString("~/Views/contact/MyPartial.ascx", new SomeObject()),

secondary_content = RenderPartialToString("~/Views/contact/MyPartial.ascx", new SomeObject()),

}

};

return Json(jsonResult, JsonRequestBehavior.AllowGet);

}

并且局部具有强类型视图模型

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<SomeObject>" %>

<h1>My Partial</h1>

以上是 在ASP.NET MVC中的JSON属性中返回呈现的HTML部分 的全部内容, 来源链接: utcz.com/qa/399416.html

回到顶部