I want to output two different views (will be sent as an email in the form of a string) , And the second page
I have tried many examples:
1.
If I use this example, then I can not be redirected after the "HTTP header" is sent. " Is obtained.
2.
If I use this, I find it unable to perform a redirect reactions, because it tries to present a scene that does not exist is. If I return the scene, then it's completely messed up and does not look right.
Do anyone have any ideas / solutions to these issues, or do I have any suggestions on better people?
Many thanks!
Below is an example. What I'm trying to do is create GetViewForEmail method :
public proceedings order order (string referee) {// order order = order service. GetOrder (referee); // Email Assistant will be meat and vegetarian by viewing as a string // control name (OrderResultEmail) and model (command) string emailView = GetViewForEmail ("OrderResultEmail", order); // EmailHelper's order email (order, see email); See Return ("Order Order", Order); Tim Scott (changed and formatted by me): Public Virtual String RenderViewToString (ControllerContext)
Controller Consultant, String Viewpoint, String Masterpath, view dotactivity view, tempdata data tempData) {stream filter = empty; See pageviewpage = new viewpage (); // Right, create our visual footage page. Visual Config = New Viewer (Controller Consultant, New Webformview (Visual Source, Masterpath), ViewData, TempData); Get answers to the feedback, flush it, and get feedback filter. Var response = viewpages. Visual Restore Hpptntx response; Response.Flush (); Var old filter = response. Filter; Try to put a new filter in the {// feedback filter = new MemoryStream (); reaction. Filter = filter; // Now present the scene in the memoristream and flush the feedback view. Page view. Reference. View: Renderer (ViewPage videontax, ViewPage, ViewTextX, .http.Net; Response. Output); Response.Flush (); // Read now sung footage. Filter.Position = 0; Var reader = new streamrider (filter, feedback. Content encoding); Return Reader Reed to End (); } Finally {// clear if (filter! = Null) {filter.Dispose (); } // Now change the response filter response. Filter = old filter; }}
Example usage
Assuming a call from the controller to receive the email confirming the site. / P>
String Maestring = RenderVeTroString (This Controller Contains, "~ / View / Order / Ordering Email Espacks", "~ / View / Share / Site.Master", This. Tempdata);
Here is who came with me, and it is working for me I have added the following method (s) in my controller base class: (You can always make these static methods elsewhere which consider one controller as a parameter as I think)
MVC2 .ascx style
protected string RenderViewToString & lt; T & gt; (String scene, T model) {ViewData.Model = Model; (Var author = new stringwriter ()) using {var view = new WebFormView (Controller context, VisualPath); Var vdd = New ViewDataDictionary & lt; T & gt; (Model); Var viewCxt = New ViewContext (Controlling music, view, vdd, new tempDataDictionary (), author); ViewCxt.View.Render (viewCxt, author); Return Author Toasting (); Public string RenderRazorViewToString (String VIEWNAME, Object Model) {ViewData.Model = Model} ; (Var sw = new stringwriter ()) using {var viewResult = ViewEngines.Engines.FindPartialView (Controller, viewName); Var viewContext = New ViewContext (Controller Contents, View View, View Data, TempData, SW); Scene View. Render (VisualText, SG); ViewResult.ViewEngine.ReleaseView (Controller, viewResult.View); Return sw.getStringBuilder (). ToString (); }}
Edit: Added razor code.
Comments
Post a Comment