简体   繁体   English

以字符串形式获取MVCpartialView / View数据

[英]Get MVC partialView/View data in string

I have a requirement where I need HTML data from View to be saved in a string variable, something like this 我有一个要求,我需要将View中的HTML数据保存在字符串变量中,类似这样

string data = GetData(Id)

and GetData is a method which returns View like GetData是一种返回View的方法,例如

public ActionResult GetData(int Id) { return PartialView("ViewName"); }

My requirement is to get whatever this View creates/return as an HTML to be assigned to string variable data 我的要求是获取此View创建/返回的任何内容,并将其作为HTML分配给string变量data

Is it actually possible? 真的有可能吗?

Thanks for Help 感谢帮助

Try this 尝试这个

 public static string GetTemplateContentInstance(ControllerContext controllerContext, string viewName, object model)
    {
        if (string.IsNullOrWhiteSpace(viewName))
            //Return name of view for current action
            viewName = controllerContext.RouteData.GetRequiredString("action");

        controllerContext.Controller.ViewData.Model = model;
        using (StringWriter stringWriter = new StringWriter())
        {
            ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controllerContext, viewName);
            ViewContext viewContext = new ViewContext(controllerContext, viewResult.View, controllerContext.Controller.ViewData, controllerContext.Controller.TempData, stringWriter);
            viewResult.View.Render(viewContext, stringWriter);

            return stringWriter.GetStringBuilder().ToString();
        }
    }

Use as below 用途如下

 string viewBody = GetTemplateContentInstance(this.ControllerContext, Url.Content("ViewName"), ModelName)

Try this: 尝试这个:

private string GetHtmlFromUrl(string url)
{
    string html = "";
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);

    HttpWebResponse response = (HttpWebResponse)request.GetResponse();
    // get the response stream.
    //Stream responseStream = response.GetResponseStream();
    // use a stream reader that understands UTF8
    StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
    html = reader.ReadToEnd();
    // close the reader
    reader.Close();
    response.Close();
    return html;//return content html
}

Usage: 用法:

string data = GetHtmlFromURL("/YourController/GetData/{ID}") 
//or GetHtmlFromURL("/YourController/GetData?ID={ID}") if your route isn't set to accept ID

You try to create an instance of an HtmlHelper and use the RenderPartial extension methods within that helper 您尝试创建一个HtmlHelper的实例,并在该帮助器中使用RenderPartial扩展方法。

Note: you need to include a using to System.Web.Mvc.Html to access the RenderPartial 注意:您需要包括对System.Web.Mvc.Html的使用,以访问RenderPartial

public static HtmlHelper GetHtmlHelper( this Controller controller )
        {
            var viewContext = new ViewContext( controller.ControllerContext, new FakeView(), controller.ViewData, controller.TempData, TextWriter.Null );
            new HtmlHelper( viewContext, new ViewPage() ).RenderPartial("/mypartial");
        }

        public class FakeView : IView
        {
            public void Render( ViewContext viewContext, TextWriter writer )
            {
                throw new InvalidOperationException();
            }
        }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM