如何在asp .net mvc 2视图中呈现绝对URL

时间:2013-03-11 12:40:09

标签: c# asp.net-mvc asp.net-mvc-2

在AS:NET / Mono MVC2方法下面Render a view as a string用于创建html电子邮件正文。

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

1 个答案:

答案 0 :(得分:3)

只需使用proper overload

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

由于我们已经指定了协议,因此帮助程序将生成绝对URL。此外,如果您不想对其进行硬编码,您可以从当前请求中读取它:

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

现在,这将适用于标准和HTTPS方案,具体取决于请求视图的方式。