3

以下のような MVC 2.0 html コードがあります。それを MVC 3.0 Razor コードに置き換えたいのですが、MVC 2.0 のような 1 行のコードを使用して動作させることはできません。

<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で動作する1行のコードを誰でも教えてくれます.

<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からRazorへ

于 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 に答える