-1
ここは私のMVCビューページですVBコードで、そのViewData( "最大超過")はコントローラから渡されます。つまり、ViewData( "Maximum exceed")がtrueの場合、ラベルコントロールで行がレンダリングされます。私のVB構文に何か問題はありますか?どのように私はビューのページにVBの条件を置くことができますか?剃刀ビューページのVB構文
@Using (Html.BeginForm())
@<table>
@If ViewData("IsMaximumExceed") Then
<tr>
<td colspan="3">
@Html.Label(
Sub(settings)
settings.AssociatedControlName = "MaximumExceed"
settings.Text = "Maximum Exceed"
End Sub).GetHtml()
</td>
<tr>
</table>
End Using
問題は何ですか?それは私には大丈夫です... VBはASP.NET Core(Razorを含む)でサポートされていないので、できるだけ早くC#に移行する必要があります。 – Dai
ASP.NET MVCには「コントロール」はありません.Html.LabelはHTMLをステートレスに直接描画する「HTMLヘルパー」です。 – Dai
ひらめきビューの
答えて
@Using (Html.BeginForm())
文は「コードブロックモード」でフォームを開始しますので、VB.NETのコンテキストで使用すると、「テキストモード」に設定する必要があるのいずれか、@<text>...</text>
(単一または複数行モード)または単に@
を@:
(単一ライン演算子)を使用して、 HTMLのブロック要素で続く:HTMLタグを囲むように、オペレータの使用の背後にある理由は、VB.NETはC#はありません「テキストモード」内部「コード・ブロック・モード」を適用することにより、インラインXML要素を可能とすることですその機能(Razor syntax for VB.NETを参照)。
したがって、問題の提供サンプルは
If
コードブロックの下にHTMLブロック要素を作成するために@
<tr>
前にタグを使用して、次のように変更する必要があります。@Daiが彼の答えで述べたように、私も好みます特性を有する、強く型付けされた「ビューモデル」の使用ではなく、従って変更されたコードを以下に示す
ViewBag
又はViewData
を通過:モデル
コントローラ
ビュー
関連問題:
Razor View Engine Quirks in VB.NET
Using in Razor VB.net MVC not work as expected
出典
2017-04-13 03:59:27
私はそれを得ました、これはまさに私が探していたものです。本当にありがとう。 – Julia
@Juliaスタックオーバーフローへようこそ。その解決策を見つけたことを示すチェックマークをクリックすることで、問題を解決した回答を[受諾](https://meta.stackexchange.com/q/5234/179419)とみなしてください。そうする義務はありません。 –
あなたは引数が
Label(HtmlHelper, String, String)
に間違っています。最初の文字列パラメータはexpression
、2番目の文字列パラメータはlabelText
です。そこキー"Maximum exceed"
と辞書メンバーだがexpression
値が"MaximumExceed"
ある場合あなた
If ViewData("Maximum exceed")
かどうかを確認する - 彼らは一致していません。つまり、型なし
ViewData
またはViewBag
オブジェクトを使用する代わりに、厳密に型指定された「ビューモデル」オブジェクトを使用することをお勧めします。は、プロパティの文字列名を取得する
NameOf
オペレータの私の使用に注意してください。または、より良い方法は、Html.LabelFor
を使用します。出典
2017-04-13 00:37:35 Dai
お返事ありがとうございました。私はかみそりの視点で表現を適用します。 – Julia
しかし、テーブル行にLabelコントロールを表示したいのですが、ビューにVB構文条件を挿入するにはどうすればいいですか? – Julia
関連する問題