I am using an if else in Razor view to check for null value like this:
@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>
}
However, no matter my model amount is null or having a value, the html rendered do not contain any value in the amount.
I wonder why this is happening. Any idea?
Thanks...
EDIT:
Decided to did it in controller:
// 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;
}
and call at View like:
<td class="shoptableamount">
@Html.Action("GetItemAmount", "Shop", new { fid = item.ShopListFoodID })
</td>
That's because you are using the
Display()
method incorrectly. The overload you are using isDisplay(HtmlHelper, String)
. If you are looking for "--" to be the text, you should use something like:There are actually two other ways to display text from a code block in razor besides the suggested @(""), using a <text> tag and it's shorthand @:
The code above will display -- three times.
You have to use the
@()
As noted in the comments and other answers, the
Html.Display
is not for displaying strings, but for displaying data from theViewData
Dictionary or from aModel
. Read http://msdn.microsoft.com/en-us/library/ee310174%28v=VS.98%29.aspx#Y0I think you want to display "-----" if amount is null.