空的@ Html.DisplayFor

时间:2013-07-10 16:50:51

标签: asp.net-mvc asp.net-mvc-4

我想在model.EndDate0

时显示空字符串
                @Html.DisplayFor(modelItem => model.EndDate)

我试过

@Html.DisplayFor(modelItem => model.EndDate == 0 ? "" : model.EndDate.ToString())

@Html.Display("End Date",model.EndDate == 0 ? "" : model.EndDate.ToString())

两者都不适合我。当数据可用时,两者都显示为空。

5 个答案:

答案 0 :(得分:3)

DisplayFor之外执行条件:

@if (Model.EndDate != 0)
{
    Html.DisplayFor(modelItem => model.EndDate)
}

答案 1 :(得分:0)

您无法在asp.net中将日期时间与0进行比较。

error CS0019: Operator `==' cannot be applied to operands of type `System.DateTime' and `int'

DateTime是一种值类型,因此在未设置时,它会获得默认值DateTime.MinValue。

using System;
public class Test {
    public static DateTime badDate;
    public static DateTime goodDate = DateTime.Now; 
    public static void Main(string[] args) {
        Console.WriteLine(goodDate == DateTime.MinValue ? "" : goodDate.ToString());
        Console.WriteLine(badDate == DateTime.MinValue ? "" : badDate.ToString());
    }
}

答案 2 :(得分:0)

我认为你应该让你的模型属性成为可以为空的类型。因此,例如,如果其类型为DateTime,则将该属性声明为可为空的DateTime:

public DateTime? EndDate { get; set; }

这种方式而不是0日期(无论这意味着什么)你将没有任何价值。这也是有意义的,特别是如果这个模型属性来自数据库并且可以为空。

您可以在此处详细了解可空类型:http://msdn.microsoft.com/en-us/library/2cf62fcy(v=vs.80).aspx

答案 3 :(得分:0)

这个怎么样?

DateTime dt;
if (DateTime.TryParse("Your Date", out dt))
{
    //Now you have validated the date
    //Your code goes here
}

答案 4 :(得分:0)

我不喜欢上面给出的答案,因为将 IF 语句添加到所有内容只会减慢您的系统速度,在我的情况下,当类属性为 a 时,我需要在列表视图的每一行中多次显示默认字符串值空值。

所以看看这里的 MS 文档: DisplayFormatAttribute.NullDisplayText Property

以下示例展示了如何使用 NullDisplayText 定义当数据字段为空时显示的标题。

// Display the text [Null] when the data field is empty.
// Also, convert empty string to null for storing.
[DisplayFormat(ConvertEmptyStringToNull = true, NullDisplayText = "[Null]")]
public object Size;