ユーザー用のモデルを作成していますが、結合されたプロパティをNow()に設定したいと思います。これが私のコードです:
[DefaultValue(DateTime.Now)]
public DateTime joined {get; set;}
エラーが発生します:
属性の引数は、定数式、typeof式、または属性パラメーター型の配列作成式である必要があります。
私は何が間違っているのですか?そして、私がやりたいことをするための最良の方法は何ですか?
ユーザー用のモデルを作成していますが、結合されたプロパティをNow()に設定したいと思います。これが私のコードです:
[DefaultValue(DateTime.Now)]
public DateTime joined {get; set;}
エラーが発生します:
属性の引数は、定数式、typeof式、または属性パラメーター型の配列作成式である必要があります。
私は何が間違っているのですか?そして、私がやりたいことをするための最良の方法は何ですか?
DateTime.Now
は定数ではありませんが、実行時に計算されるプロパティです。そのため、提案していることを実行できません。
あなたはあなたが提案していることを次のいずれかで行うことができます:
public class MyClass {
public DateTime joined { get; set; }
public MyClass() {
joined = DateTime.Now;
}
}
または:
public class MyClass {
private DateTime _joined = DateTime.Now;
public DateTime joined { get { return _joined; } set { _joined = value; } }
}
モデルクラスでこれを試すことができます。
private DateTime _joined = DateTime.Now;
public DateTime Joined
{
get { return _joined; }
set { _joined = value; }
}
式をデフォルト値属性に設定することはできません。dataannotaionsはランタイム属性ではないためです。このようにデフォルト値を設定する必要があります
private DateTime _joined = DateTime.Now;
public DateTime Joined
{
get {
return _joined;
}
set {
_joined = value;
}
}
他の人が提案するようにそれを行うことができますが、別の方法は、ビューモデルからドメインにマッピングした後、データベースに追加する直前に、アクションメソッドで設定することです(これが必要な場合):
[HttpPost]
public ActionResult Create(YourViewModel viewModel)
{
// Check if view model is not null and handle it if it is null
// Do mapping from view model to domain model
User user = ... // Mapping
user.DateJoined = DateTime.Now;
// Do whatever else you need to do
}
ユーザーのdomailモデル:
public class User
{
// Other properties here
public DateTime DateJoined { get; set; }
}
個人的には、アクションメソッドで設定します。これは、ユーザーが実際にデータベースに追加された日時に近いためです(これがあなたのやりたいことだと仮定します)。12:00にユーザーオブジェクトを作成すると、これはユーザーがデータベースに追加される時間になりますが、12:30に送信ボタンをクリックするだけの場合はどうでしょうか。私は12:00よりも12:30の方がずっと好きです。