5

UPDATE 問題は構文の問題でした。@awrigley は、Razor でこれを記述する正しい方法を示しています。

以下の作品:

@if(Model.Thing.Prop != null)
{
    Html.RenderPartial("SomePartialView", Model.Thing.Prop);
}

Foo特定の上位 1 つの詳細をBarHTML テーブルとして表示する必要があります。Foo空のテーブルを非表示にしたり、 nullの場合に「見つかりません」というメッセージを表示したりするにはどうすればよいですか?

例えば。NullReferenceException次の行にが表示Model.Thing.Propされnullます。

@{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

意図的に null です。リポジトリは空の代わりに null を返しますFoo。しかし、これは少し的外れです。つまり、 null が与えられた場合、 .Model.Thing.Propを呼び出したくないということですHtml.RenderPartial

更新
私は運が悪く、次のことを試しました:

@if(Model.Thing.Prop != null)
{
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
}

その結果、Visual Studio は、行 1、列 1 で期待;されていること、および行 1、列 1 で;無効な式であることを教えてくれます (これは、MVC3 のプレリリース ステータスによるものだと思います)。取得したブラウザでページにアクセスする

CS1501: メソッド 'Write' のオーバーロードは引数を 0 とらない

行が@Html.RenderPartial強調表示されます。

私も試しました

@if(Model.Thing.Prop != null)
{
    <text>
    @{Html.RenderPartial("SomePartialView", Model.Thing.Prop);}
    </text>
}

しかし、これは私の部分ビュー内からの結果になり、NullReferenceException正しくないようです。Model.Thingは間違いなく有効Barであり、Model.Thing.Prop間違いなくですnull Foo

4

2 に答える 2

2

私はあなたが使いたくないと思います...

@if (Model.Thing.Prop != null)
{Html.RenderPartial("SomePartialView", Model.Thing.Prop);} 

...部分ビューの一部をレンダリングしたいからですか?

大野。あなたの投稿を正しく読んでください。

上記のコードが機能しない理由がわかりません。

編集:

Razor では、@ は次の 2 つの方法で使用できることに注意してください。

  1. ステートメントを実行するには:

    @{ MyStatement; }

  2. HtmlHelper、何らかの形式の文字列を返すクラス メソッド、プロパティ、または変数 (例: HtmlString、MvcHtmlString、または文字列) を評価します。例えば:

    @MyClass.MyStringProperty

ケース 2 では、末尾のセミコロンは不要であることに注意してください。

1 と 2 は、文字列以外 (void など) を返す htmlhelper がある場合は、次のように呼び出す必要があることを示しています。

@{Html.MyHelperThatReturnsVoid;}

一方、文字列または HtmlString または MvcHtmlString を返す HtmlHelper を使用すると、次のように簡単に記述できます。

@Html.MyHelperThatReturnsAString

詳細については、私が尋ねた質問に対する受け入れられた回答を参照してください。

void を返すカスタム HtmlHelper 問題


于 2010-11-23T22:50:57.710 に答える
0

これは、MVC3 の変更か、何か奇妙なことです。

MVC2 の動作:
Model.Thing が null の場合、はい、null ref 例外です。
Model.Thing が存在し、Thing.Prop が null の場合、モデルに null 参照を渡します。null 参照をモデルに渡すと、親モデル (ここではモデル) がモデルとして "SomePartialView" に渡され、Prop 型が必要になります (Model と Prop が同じ型でない場合)。

null 参照を取得していることを考慮して、Model.Thing が null であると仮定します。その場合、唯一の解決策は @if ステートメントです。null をモデル ref に渡すだけでは機能せず、その動作について頭を悩ませています。

繰り返しますが、これは MVC2 の動作です。これが MVC3 で変更され、正直に null モデルを渡すことができる場合、素晴らしいです!

于 2010-11-23T22:59:16.770 に答える