Визуализируйте некоторое представление в строку и отправьте его через Json - PullRequest
0 голосов
/ 07 февраля 2012

Мне нужно визуализировать View в строку и отправить ее через Json. Пример.

        [HttpPost]
        public ActionResult GetTreeUnit(string id)
        {
            int _id = id.ExtractID();
            string render ="";

            // render = GetStringView("SomeView");

            return Json(new { data = render });
        }

Ответы [ 3 ]

2 голосов
/ 13 марта 2012

Я создал решение для моего вопроса. Это расширение, которое отображает вид в строку.

public static class RenderPartialToStringExtensions
{
    /// <summary>
    /// render PartialView and return string
    /// </summary>
    /// <param name="context"></param>
    /// <param name="partialViewName"></param>
    /// <param name="model"></param>
    /// <returns></returns>
    public static string RenderPartialToString(this ControllerContext context, string partialViewName, object model)
    {
        return RenderPartialToStringMethod(context, partialViewName, model);
    }

    /// <summary>
    /// render PartialView and return string
    /// </summary>
    /// <param name="context"></param>
    /// <param name="partialViewName"></param>
    /// <param name="viewData"></param>
    /// <param name="tempData"></param>
    /// <returns></returns>
    public static string RenderPartialToString(ControllerContext context, string partialViewName, ViewDataDictionary viewData, TempDataDictionary tempData)
    {
        return RenderPartialToStringMethod(context, partialViewName, viewData, tempData);
    }

    public static string RenderPartialToStringMethod(ControllerContext context, string partialViewName, ViewDataDictionary viewData, TempDataDictionary tempData)
    {
        ViewEngineResult result = ViewEngines.Engines.FindPartialView(context, partialViewName);

        if (result.View != null)
        {
            StringBuilder sb = new StringBuilder();
            using (StringWriter sw = new StringWriter(sb))
            {
                using (HtmlTextWriter output = new HtmlTextWriter(sw))
                {
                    ViewContext viewContext = new ViewContext(context, result.View, viewData, tempData, output);
                    result.View.Render(viewContext, output);
                }
            }

            return sb.ToString();
        }
        return String.Empty;
    }

    public static string RenderPartialToStringMethod(ControllerContext context, string partialViewName, object model)
    {
        ViewDataDictionary viewData = new ViewDataDictionary(model);
        TempDataDictionary tempData = new TempDataDictionary();
        return RenderPartialToStringMethod(context, partialViewName, viewData, tempData);
    }
}

И чем мы можем визуализировать представление в действии

[HttpPost]
public ActionResult GetTreeUnit(string id)
{
    int _id = id.ExtractID();
    string render = ControllerContext.RenderPartialToString("SomeView");
    return Json(new { data = render });
}
0 голосов
/ 07 февраля 2012

Отображаемая строка является объектом DOM, поэтому просто добавьте ее к желаемому элементу HMTL

$.ajax({
    url: "Controller\GetTreeUnit"
    data: "id=3",
    type: "POST",
    success: function(result){
        $("#content").append(result);
    }

});

<div id="content">
</div>
0 голосов
/ 07 февраля 2012

Если вы хотите вернуть данные, которые были обработаны представлением, измените контроллер для возврата частичного представления. Этот пост актуален: asp.net MVC частичное представление контроллера, действие

...