【问题标题】:How to render absolute URL in asp .net mvc 2 view如何在 asp .net mvc 2 视图中呈现绝对 URL
【发布时间】:2013-03-11 12:40:08
【问题描述】:

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

部分视图 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();
        }
    }

【问题讨论】:

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


    【解决方案1】:

    只需使用proper overload:

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

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

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

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

    【讨论】:

    • 站点中也使用相同的视图来显示浏览器中的顺序。在这种情况下,绝对地址也出现在浏览器中。这样可以吗?
    • 是的,没关系。没问题。
    • 您只是不想对绝对 URL 进行硬编码,除此之外使用它们没有任何问题,因此只要生成它们,每个链接都可以是绝对的。
    猜你喜欢
    • 2012-09-04
    • 2010-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    相关资源
    最近更新 更多