0

我使用 Linq to Entity,从数据库中获取模型

 var works = db.Work.Where(a => a.StartDate == DateTime.Now).ToList();

此模型包含一个 DateTime,我想在将其发送到视图之前将其更改为字符串,因为需要将其显示为 persianDate Time,如下所示:

    foreach (var item in workslist)
                {
                    item.StartDate = "1391/01/01"; //Just For Exapmle as you know this won't work
                }
return View(workslist);

那么有没有办法改变强类型模型中的数据类型呢?或其他方式来执行此操作,除了将 DateTime 保存为我的数据库中的字符串

4

2 回答 2

0

您可以在控制器中有一个函数来将日期时间更改为字符串

public string changeDateTimeToPersianString ( DateTime time)
    {
// your code
}

然后你可以从你的视图中调用这个函数。

在 Razor 中是这样的

@changeDateTimeToPersianString(workslistitem.StartDate)
于 2012-04-14T13:08:10.217 回答
0

您可以将 [DisplayFormat] 属性与 EditorFor/DisplayFor 助手一起使用来格式化数据。

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/mm/dd}")]
public DateTime StartDate { get; set; }

然后在视图中:

@Html.EditorFor(m => m.StartDate)

或者,您也可以考虑为您的“工作”域模型定义单独的 ViewModel。虽然这种方法会产生更多的代码,但它提供了更多的灵活性并被认为是良好的实践。这是示例代码:

public class Work
{
    public DateTime StartDate {get;set;}
}

public class WorkViewModel
{
    public WorkViewModel()
    {
    }

    public string StartDate { get; set; }

    public static WorkViewModel Map(Work domainModel)
    {
        return new WorkViewModel() { 
            //Apply your Date format logic
            StartDate = domainModel.StartDate.ToString("yyyy/MM/dd")
        };
    }
}

在行动方法:

var works = db.Work.Where(a => a.StartDate == DateTime.Now).ToList();
var workViewModels = new List<WorkViewModel>(works.Count);
foreach (var work in works)
    workViewModels.Add(WorkViewModel.Map(work));

return View(workViewModels);
于 2012-04-14T16:48:14.580 回答