0

DBからモデルを取得するために、Linq to Entityを使用しました

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

このモデルには、次のように persianDate Time として表示する必要があるため、ビューに送信する前に文字列に変更したい DateTime が含まれています。

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

厳密に型指定されたモデルでデータ型を変更する方法はありますか? または、DateTime を DB に文字列として保存する以外の方法でこれを行う

4

2 に答える 2

0

[DisplayFormat] 属性を EditorFor/DisplayFor ヘルパーで使用して、データをフォーマットできます。

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

次に、ビューで:

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

または、「Work」ド​​メイン モデルに別の 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 に答える
0

コントローラーに日時を文字列に変更する関数を含めることができます

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

次に、ビューからこの関数を呼び出すことができます。

Razorでこのようなもの

@changeDateTimeToPersianString(workslistitem.StartDate)
于 2012-04-14T13:08:10.217 に答える