Если другое выражение в Razor не работает
Я использую if if else в представлении Razor для проверки нулевого значения следующим образом:
@foreach (var item in Model)
{
<tr id="@(item.ShopListID)">
<td class="shoptablename">@Html.DisplayFor(modelItem => item.Name)
</td>
<td class="shoptableamount">
@if (item.Amount == null)
{
Html.Display("--");
}
else
{
String.Format("{0:0.##}", item.Amount);
}
</td>
</tr>
}
Однако, независимо от того, какая моя модель равна null или имеет значение, рендеринг html не содержит никакого значения в размере.
Интересно, почему это происходит. Любая идея?
Спасибо...
EDIT:
Решил сделать это в контроллере:
// Function to return shop list food item amount
public string GetItemAmount(int fid)
{
string output = "";
// Select the item based on shoplistfoodid
var shopListFood = dbEntities.SHOPLISTFOODs.Single(s => s.ShopListFoodID == fid);
if (shopListFood.Amount == null)
{
output = "--";
}
else
{
output = String.Format("{0:0.##}", shopListFood.Amount);
}
return output;
}
и вызовите в Вид, как:
<td class="shoptableamount">
@Html.Action("GetItemAmount", "Shop", new { fid = item.ShopListFoodID })
</td>
Ответы
Ответ 1
Вы должны использовать @()
@if (item.Amount == null)
{
@("--");
}
else
{
@String.Format("{0:0.##}", item.Amount)
}
Как отмечено в комментариях и других ответах, Html.Display
не предназначен для отображения строк, а для отображения данных из словаря ViewData
или из Model
. Прочитайте http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0
Ответ 2
Я думаю, вы хотите отобразить "-----", если сумма равна нулю.
@foreach (var item in Model)
{
<tr id="@(item.ShopListID)">
<td class="shoptablename">@Html.DisplayFor(modelItem => item.Name)
</td>
<td class="shoptableamount">
@if (item.Amount == null)
{
@Html.Raw("--")
}
else
{
String.Format("{0:0.##}", item.Amount);
}
</td>
</tr>
}
Ответ 3
Это потому, что вы неправильно используете метод Display()
. Перегрузка, которую вы используете, Display(HtmlHelper, String)
. Если вы ищете текст "-", вы должны использовать что-то вроде:
@Html.Label("--");
Ответ 4
На самом деле есть два других способа отображения текста из кодового блока в бритве, кроме предложенного @(""), с использованием тега <text> и его сокращенного @:
@{
@("--")
<text>--</text>
@:--
}
Вышеуказанный код будет отображаться - три раза.