2013-03-11 81 views
1

在AS中:NET/Mono MVC2下面的表单Render a view as a string方法用于创建html电子邮件正文。如何在asp.net中呈现绝对URL mvc 2查看

Partiil视图Order.ascx包含像

<img width='20%' alt='' src='<%= Url.Action("Logo", "Store")%>' /> 

电子邮件中的图像出现不一样/Store/Logo因而不显示图像的网站地址的图像。 如何强制图像链接出现绝对地址,如htttp:/Mysite.com/Store/Logo或添加网站的基地址到HTML电子邮件正文是这个帮助。

使用ASP.NET/Mono MVC2,.NET 3.5,jquery,jquery ui。

控制器的操作方法:

 var s = RenderViewToString<OrderConfirm>("~/Views/Checkout/Order.ascx", order); 

public class ControllerBase : Controller 
{ 
    protected string RenderViewToString<T>(string viewPath, T model) 
    { 
     ViewData.Model = model; 
     using (var writer = new StringWriter()) 
     { 
      var view = new WebFormView(viewPath); 
      var vdd = new ViewDataDictionary<T>(model); 
      var viewCxt = new ViewContext(ControllerContext, view, vdd, new TempDataDictionary(), writer); 
      viewCxt.View.Render(viewCxt, writer); 
      return writer.ToString(); 
     } 
    } 

回答

3

只需使用proper overload

<%= Url.Action("Logo", "Store", null, "http") %> 

既然我们指定的协议,这个助手将生成一个绝对URL。此外,如果你不想硬编码,你可以从当前请求阅读:

<%= Url.Action("Logo", "Store", null, Request.Url.Scheme) %> 

现在,这将为标准和HTTPS模式运行取决于视图是如何要求的。

+0

同一视图也用于网站在浏览器中显示订单。在这种情况下,绝对地址也是浏览器。这个可以吗 ? – Andrus 2013-03-11 12:43:26

+0

是的,没关系。没有问题。 – 2013-03-11 12:44:42

+0

你只是不想对绝对URL进行硬编码,除此之外使用它们没有任何问题,所以只要它们生成了,每个链接都可以是绝对的。 – 2013-03-11 12:49:25

相关问题