2013-03-15 59 views
15

我要呈现的图像使用string.Format这样的Razor视图...在MVC剃刀使用的String.format查看

foreach (var p in @Model.Photos) 
{       
    string.Format("<img src='{0}' width='100' alt='{1}' />", p.Path, 
           p.AlternateText);      
} 

东西显然是错误的在这里,因为在渲染这个页面,我已经本节内容没有任何内容。

回答

25

string.Format()返回一个字符串,您将放弃。

您需要在字符串打印到页面:

@string.Format(...) 

注意,因为这不是一个声明,不应该有一个;

另外请注意,这将是更好地使用刀片本身:

<img src="@p.Path" width="100" alt="@p.AlternateText" /> 
10

我只是单纯地这样做是为了绕过这个问题:

@model UXLab.Areas.SectionArea.ViewModels.SectionViewModel 
<section> 
    <header>@Model.Title</header> 
    <p> 
     @{var contentBuilder = new System.Text.StringBuilder(); } 
     @foreach (var link in Model.Links) 
     { 
      contentBuilder.append(Html.ActionLink(link.LinkText, link.Action, 
                link.Controller)); 
     } 
     @Html.Raw(contentBuilder.ToString()) 
    </p> 
</section> 

在这个例子中,我遍历一些链接我想显示到存储在ViewModel中的页面。

为了显示在页面上的链接,我遍历所有这些附加他们到StringBuilder,然后用Html.Raw显示原始的HTML,如果你不使用Raw,那么你就无法获得报价和东西通过对页面例如:

1: @String.Format("\"Hello {0}\"", Model.Name) 

2: @Html.Raw(String.Format("\"Hello {0}\"", Model.Name)) 

1号线将显示&#34; Hello &#34; Melman
2号线将显示"Hello Melman"

只是一些东西,我已经发现了与打出来的时候放到页面上。基本的想法是,你建立页面的HTML,然后显示它。因此,一个商店,你去的方法,一旦你完操纵HTML输出,然后显示它使用@ outsite的任何{}

+0

“@ Html.Raw”的+1。 – 2013-10-03 09:37:37

12

它使用string.Format在剃刀痛苦是真实的,但你Html.FormatValue,这里是如何使用它:

@Html.FormatValue("value", "format") 

的方法签名是:

FormatValue(object value, string format) 
1

我有同样的问题,我已经做到了这样的使用Url.C内容和字符串。格式:

<img src="@Url.Content(string.Format("~/Content/img/{0}", Resources.MyImage))" />