这是我的MVC View页面VB代码,从控制器传递ViewData(“最大超出”)。也就是说,如果ViewData(“Maximum exceeded”)为true,它将呈现带有标签控件的行。我的VB语法有什么问题吗?如何将VB条件放在View页面中?
@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
答案 0 :(得分:1)
你有Label(HtmlHelper, String, String)
的论据是错误的。第一个字符串参数是expression
,第二个字符串参数是labelText
。
您的If ViewData("Maximum exceed")
检查是否有关键字"Maximum exceed"
,但expression
值为"MaximumExceed"
的词典成员 - 他们不匹配。
那就是说,你应该更喜欢一个强类型的视图模型&#34;而不是使用无类型的ViewData
或ViewBag
对象。
Public Class MyPageViewModel
Public MaximumExceeded As Boolean
End Class
...
Public Function MyControllerAction() As ActionResult
Dim viewModel As New MyPageViewModel
viewModel.MaximumExceeded = True
Return Me.View( viewModel )
End Sub
...
@Model MyPageViewModel
@If Model.MaximumExceeded Then
@Html.Label( NameOf(Model.MaximumExceeded), "Maximum exceeded" )
End If
请注意我使用NameOf
运算符来获取属性的字符串名称。或者更好的是,使用Html.LabelFor
。
答案 1 :(得分:1)
由于@Using (Html.BeginForm())
语句在&#34;代码块模式&#34;中开始一个表单,在VB.NET上下文中你需要设置&#34;文本模式&#34;使用@:
(单行操作符),@<text>...</text>
(单行或多行模式)或仅使用@
后跟HTML块元素:
' Using @:
@Using (Html.BeginForm())
@:<table cellpadding="0" cellspacing="0" style="width: 800px; height:100px;">
<!-- inner table -->
@:</table>
End Using
' Using @<text>...</text>
@Using (Html.BeginForm())
@<text><table cellpadding="0" cellspacing="0" style="width: 800px; height:100px;">
<!-- inner table -->
</table></text>
End Using
'Using @<tag>...</tag>
@Using (Html.BeginForm())
@<table cellpadding="0" cellspacing="0" style="width: 800px; height:100px;">
<!-- inner table -->
</table>
End Using
使用运算符封装HTML标签的原因是VB.NET通过应用&#34; text模式&#34;允许内联XML元素。内部&#34;代码块模式&#34;哪个C#没有这个功能(见Razor syntax for VB.NET)。
因此,应使用@
标记<tr>
之前的If
来修改相关提供的示例,以便在@Using (Html.BeginForm())
@<table cellpadding="0" cellspacing="0" style="width: 800px; height:100px;">
@If ViewData("IsGroupVessel") Then
@<tr>
<td colspan="3">
@Html.DevExpress().Label(Sub(settings)
settings.AssociatedControlName = "GroupBooking"
settings.Text = "Maximum Exceeded"
End Sub).GetHtml()
</td>
</tr>
End If
</table>
End Using
代码块下创建HTML块元素:
ViewBag
正如@Dai在他的回答中所说,我也更喜欢使用强类型&#34;视图模型&#34;使用属性而不是传递ViewData
或Public Class ViewModel
Public Property IsExceeded As Boolean
' other models
End Class
,因此修改后的代码如下所示:
<强>模型强>
Public Function ActionMethod() As ActionResult
Dim model As New ViewModel
' other logic
model.IsExceeded = True
' other logic
Return Me.View(model)
End Function
<强>控制器强>
@ModelType ViewModel
@Using (Html.BeginForm())
@<table cellpadding="0" cellspacing="0" style="width: 800px; height:100px;">
@If Model.IsExceeded Then
@<tr>
<td colspan="3">
@Html.DevExpress().Label(Sub(settings)
settings.AssociatedControlName = "GroupBooking"
settings.Text = "Maximum Exceeded"
End Sub).GetHtml()
</td>
</tr>
End If
</table>
End Using
查看强>
exportCategory()
相关问题: