私は自分の問題に最も適した方法を理解しようとしています。モデルに値を追加してModelStateの入札を渡す
public class Customer
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
[Required]
public int StoreId { get; set;}
[Required]
public DateTime UpdatedAt {get; set;}
}
と私は、データベースに新しい顧客を挿入するために、次のような方法がありますAPIコントローラがあります:今、することができますように
public IHttpActionResult Insert(Customer customer)
{
customer.StoreId = 5; //just for example
customer.UpdatedAt = DateTime.Now; //again, just as example
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
db.Customers.Add(customer);
db.SaveChanges();
return Ok(customer.Id);
}
をさんは、私はこのようなモデルを持っているとしましょうこのメソッドでは、StoreId
フィールドとUpdatedAt
フィールドが、このメソッドに送信された元のhttpリクエストに含まれないと仮定します。これらの値は、サーバー側で計算して割り当てる必要があります(基本的にクライアントは想定されていませんこれらの値をサーバー側のメソッドに送信する)。この場合、2つの必須フィールドがないため、ModelState
はもう有効ではありません。あなたはそれを回避することができます
一つの方法は、実行して、1でモデル状態1のエラーをクリアすることです:検証をやって、その後
ModelState["Store.Id"].Errors.Clear();
ModelState["UpdatedBy"].Errors.Clear();
をして、それは良い方法を見ていません特に、サーバー側で処理する必要があるフィールドが多い場合は、
もっと良い解決策はありますか?
モデルは有効です。 'StoreId'と' UpdatedAt'の値を渡さないと、デフォルト値( '0'と' 1/1/0001')として初期化されます。無効にする唯一の方法は、あなたが特に 'null'値を送る場合です。これらのプロパティを含まないビューモデルを使用する必要があります。特定のエラーメッセージを指定したい場合を除いて '[Required]'属性を追加する必要はありません。 'int'と' DateTime'はヌル入力可能ではなく、常に必要です。 –
あなたは必要な値または参照値を'view'をコントローラに送る前に、モデルが常に有効になります。 nullを送信した場合のみ、無効になります – TheUknown