2013-05-15 87 views
0

MVC partialView /查看数据我有我需要从查看HTML数据被保存在一个字符串变量的要求,像这样获取字符串

string data = GetData(Id)

和的GetData是返回视图的方法像

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

我的要求是要什么有什么由此看来创建/回报作为HTML被分配到string变量data

实际上可行吗?

感谢您的帮助

+2

看一看[这个问题](http://stackoverflow.com/questions/483091/render- a-view-as-a-string) –

回答

1

试试这个

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(); 
     } 
    } 

使用如下

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

Amit:只是为了验证,上面的代码建议是我将数据添加到一个'Model'''中然后传递'''Model'''作为参数?它是什么ModelName? – Jay

+0

这是您的模型名,使您的视图通过为零 – Amit

+0

工作像一个魅力,谢谢阿米特 – Jay

0

试试这个:

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 
} 

用法:

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

感谢Michael的快速响应,我已经复制了你的代码,但得到了这个错误''''GetHtmlFromURL'这个名字在当前上下文中不存在''''。我在同一个类中复制了''''GetHtmlFromURL''''方法,但不知道为什么应该得到这个错误。任何想法? – Jay

+0

我需要看到更多的代码才能告诉你。用你现在拥有的东西来更新你的问题。 –

0

您尝试创建的HtmlHelper的一个实例,并使用该助手中的RenderPartial扩展方法

注意:您需要包含一个using 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(); 
      } 
     } 
+0

是''''/ mypartial''''方法名称或url?我怎样才能调用''HtmlHelper'''方法 – Jay

+0

将是部分视图的路径 – miskiw