5

これは確かに簡単な質問ですが、これを理解するのに苦労しています。

こんなのやりたい……。

@(string.IsNullOrEmpty(Model.CustomerUrl) ? "" : <a href="@Model.CustomerUrl">Click me</a>)

このスニペットは機能しません。

HTML とカミソリの構文が混在していて、タグの属性に引用符が含まれているため、わかりにくくなっています。

この種のものを理解することは本当に私をつまずかせることを除いて、私はカミソリが大好きです.

CustomerUrl が null または空の場合、次をまったくレンダリングしないようにしたいと思います...

<p class="customerLink links"><a href="@Model.CustomerUrl">@Model.CustomerName</a></p>

編集
これはまだ私にとってはうまくいきません...しかし、提案に感謝します。

私の問題は、上記のコードが Razor コード ブロックに既にあることです。ここに私が理解できない私の実際のコードがあります...

編集番号2 - 次のコードが機能するようになりました

    @if (Model.Count() > 0)
    {
        foreach (var partner in Model)
        {
            <li>
                @Html.ActionLink(@partner.CustomerName, "Details", "Customer", new { id = Customer.AID }, null)<br />
                @partner.Street<br />
//this is what i cannot figure out!!
                @if(!string.IsNullOrEmpty(partner.Phone))
                    {
                        @partner.Phone@:<br />
                    }
                @partner.Distance<br />
            </li>
        }
    }

ネストされたブロック (if) の前に @ 記号を付けました。次に、
@ で区切らなければならなかったマークアップ: すると、うまくいきました。

ネストされたカミソリ コード ブロックを使用しようとしたとき、@ を前に付けたためにコンパイラ エラーが発生したようです。だから今、私はこれまで以上に混乱しています。

実際... @partner.Phone をこのように引用符で囲もうとすると..."@partner.Phone"@:</ br>別のコンパイラ エラーが発生します。Razor は機能するときは優れていますが、機能しないときは非常に混乱します。

セス

4

3 に答える 3

15

if をインライン化しないでください。

@if(!string.IsNullOrEmpty(Model.CustomerUrl))
{
    <a href="@Model.CustomerUrl">Click me</a>
}

'言っ途切れる

于 2012-05-04T14:26:32.440 に答える
4
 @if (Model.Count() > 0)
 {

おそらく、この行の前に html 表示があったため、コードを使用していることを razor に示すには、@ 記号が必要です。

    foreach (var partner in Model)
    {

既にコード ブロック内にいるため、@ 記号はここでは機能しません。

        <li>

html タグを使用することで、razor は HTML を再度表示していることを認識します。ここに含まれるすべてのコンテンツは HTML であると想定されます。ここにコードがあることを Razor に伝えたい場合は、@ 記号を使用してコードを示す必要があります。

            @if(!string.IsNullOrEmpty(partner.Phone))
            {
                @partner.Phone@:<br />
            }

コードを再度使用していることを Razor に伝える必要があるため、これは正しいことです。これが list タグのすぐ上にある場合は、ここで @ 記号を使用しないことに注意してください。既にコード内にいる場合は @ 記号を使用しないからです。

「@partner.Phone」は同じ理由で機能しません

if(something)
    ""

C# では機能しません。オブジェクトを使用せずに、コード内でオブジェクトを作成しています。

それがそれを説明するのに役立つことを願っています.

于 2012-05-04T17:16:36.890 に答える
2

条件付き出力とビューに関して、インターネット上で見つけられる提案の 1 つは、この 2 つを混在させてはならないというものです。何らかの条件に基づいて表示する必要がある場合は、HTML ヘルパーを作成する必要があります。ただし、質問に答えるためにできること (ヘルパーに煩わされたくない場合) は次のようなものです。

@if (!String.IsNullOrWhitespace(Model.CustomerUrl))
{
    <p class="customerLink links">
        <a href="@Model.CustomerUrl">@Model.CustomerName</a>
    </p>
}
于 2012-05-04T14:30:03.130 に答える