我使用Linq to Entity,从DB
获取模型 var works = db.Work.Where(a => a.StartDate == DateTime.Now).ToList();
此模型包含一个DateTime,我希望在将其发送到视图之前将其更改为字符串 beacuase需要将其显示为persianDate时间, 像这样:
foreach (var item in workslist)
{
item.StartDate = "1391/01/01"; //Just For Exapmle as you know this won't work
}
return View(workslist);
那么有没有办法在强类型模型中更改数据类型?或其他方式执行此操作,除了在我的数据库中将DateTime保存为字符串
答案 0 :(得分:0)
您可以在控制器中使用函数将日期时间更改为字符串
public string changeDateTimeToPersianString ( DateTime time)
{
// your code
}
然后你可以从你的View中调用这个函数。
在Razor中这样的事情
@changeDateTimeToPersianString(workslistitem.StartDate)
答案 1 :(得分: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);