加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-mvc – 在ASP.NET MVC中的JSON属性中返回呈现的HTML部分

发布时间:2020-12-16 00:04:20 所属栏目:asp.Net 来源:网络整理
导读:我很高兴从ASP.NET中的控制器返回JsonResult对象或部分ASP.NET视图. 我想将呈现的局部视图作为JSON对象中的属性返回.例如 请求 /post/detail/1 会回来的 {"PostId": 1,"Html": "psome markup rendered from a partial to inject/p" } 当我在JavaScript中处理
我很高兴从ASP.NET中的控制器返回JsonResult对象或部分ASP.NET视图.

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

请求

/post/detail/1

会回来的

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

当我在JavaScript中处理响应时,这将允许我知道PostId.有关最佳方法的任何提示吗?

解决方法

以下是一些可行的代码,因为我今天需要这样做. The original code is described here.
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",}
    };

    return Json(jsonResult,JsonRequestBehavior.AllowGet);
}

而partial有一个强类型的视图模型

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读