3

我有一段 MVC 2.0 html 代码如下所示,我想用 MVC 3.0 Razor 代码替换它,但我无法使用 MVC 2.0 之类的一行代码使其工作。

<legend>&nbsp;Please add review for product :<%: Model.Product.ProductName.Length > 25 ? (string)Model.Product.ProductName.Substring(0, 25) + "..." : (string)Model.Product.ProductName %>&nbsp;<i style="color:Red">(&nbsp;<%: (string)Model.Product.Category.CategoryName %>&nbsp;)</i></legend>

我可以使它工作的唯一方法如下所示,但它看起来并不整洁。我不喜欢它,任何人都可以给我一个在 MVC 3.0 Razor 中工作的代码,将不胜感激!!!

<legend>&nbsp;Please add review for product :
    <b>
        @{
            if(Model.Review.Product.ProductName.Length > 25)
            {
                @Model.Review.Product.ProductName.Substring(0, 25); @:...
            }
            else
            {
                @Model.Review.Product.ProductName;
            }
         }
    </b>
    &nbsp;<i style="color:Red">(&nbsp;@Model.Review.Product.Category.CategoryName&nbsp;)</i>&nbsp;</legend>
4

3 回答 3

3

这应该工作

<p>
   @(Model.Review.Product.ProductName.Length>25 ? 
            @Html.Raw(Model.Review.Product.ProductName.Substring(0,6)+" ..")
                                  :@Html.Raw(Model.Review.Product.ProductName))
</p>
于 2012-12-17T00:18:06.603 回答
2

更好的是,您可以使用这个 Telerik 扩展将 ASPX 转换为 Razor。它每次都对我有用!

ASPX 到剃刀

于 2012-12-17T03:55:57.310 回答
1

三元运算符 ( x > y ? x : y) 在 Razor 中可用。你只需要把它放在括号中,这样你就可以通过这样做来清理它(为了清楚起见,我为产品名称创建了一个变量):

@{ var productName = Model.Review.Product.ProductName; }
@(productName.Length > 25 ? productName.Substring(0, 25) + "..." : productName)

但是,由于您所做的是一项相当常见的任务,您可能需要考虑为修剪创建一个 HTML 帮助器方法:

public static class HtmlHelpers
{
    public IHtmlString Truncate(this HtmlHelper htmlHelper, string value, int maxLength)
    {
        if (htmlHelper == null)
            throw new ArgumentNullException("htmlHelper");

        return value != null && value.Length > maxLength
            ? new HtmlString(htmlHelper.Encode(value.Substring(0, maxLength)) + "&hellip;")
            : new HtmlString(htmlHelper.Encode(value));        
    }
}

然后你可以使用:@Html.Truncate(Model.Review.Product.ProductName, 25)在你看来,这更干净。

您还可以在以下位置定义扩展方法string

public static class StringExtensions
{
    public void Truncate(this string value, int maxLength)
    {       
        return value != null && value.Length > maxLength
            ? value.Substring(0, maxLength) + "..."
            : value;
    }
}

这将允许您这样做:@Model.Review.Product.ProductName.Truncate(25).

于 2012-12-17T01:24:09.043 回答