我在Razor代码中遇到myClient
的变量范围问题。我确信解决方案很简单。基本上我在一个单独的@{}
块中引用它可能导致了这个问题,但似乎除非我这样做,否则我会在HTML中获得if..{}
代码。
@{
int i = 0;
foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<td>
<table class="inner">
<tr><th>
@string.Format(
"{0} {1} {2}",
myClient.Title,
myClient.Initials,
myClient.LastName)
@{
if (myClient.Type!="Primary")
{
@Html.ActionLink(
"Delete",
"Delete",
"ClientBackground",
new { id=item.ID }, null)
}
}
</th></tr>
}
<table>
我的代码无法引用myClient.Type
。如果我删除了周围的@{}
,那么我会在HTML中获得c#代码。
我知道一些简单的事情,但我没有看到它。
非常感谢任何帮助。
编辑:表格已关闭。
答案 0 :(得分:2)
试试这个:
<table class="inner">
@{int i = 0;}
@foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<tr><td>@string.Format("{0} {1} {2}",myClient.Title,myClient.Initials,myClient.LastName)
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
</td></tr>
}
</table>
我对格式化做了很多猜测。重要的是,我将你的int赋值放入它自己的块中。我打开和关闭<tr>
和<td>
来匹配并将它们放在可选@if blocks
之外。但是这个版本会编译。
答案 1 :(得分:1)
这里有奇怪的语法:
@{if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
}
为什么不:
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete","ClientBackground", new { id=item.ID },null)
}
<强>加了:强>
您的更新代码包含无效的html标记,它应该类似于:
<table class="inner">
@{
int i = 0;
foreach (var item in Model.Clients)
{
Int32 myId = Convert.ToInt32(item.DBID);
var myClient = db.Client.Where(c => c.Id == myId).First();
<tr><th>
@string.Format("{0} {1} {2}", myClient.Title, myClient.Initials, myClient.LastName)
@if (myClient.Type!="Primary")
{
@Html.ActionLink("Delete", "Delete", "ClientBackground", new { id=item.ID }, null)
}
</th></tr>
}
</table>
表格未关闭,您已打开<td>
代码