2011-10-19 8 views
2

私は今、ASP.NETで初めてのMVCアプリケーションを作成しました。私は、入力フォームに表示されずに現在の日付で塗りつぶされる日時列 "CreatedAt"を持っています。しかし、生成コードには次のコードがあります。MVCのコードで入力列の値を設定

<div class="editor-field"> 
    @Html.EditorFor(model => model.CreatedAt) 
    @Html.ValidationMessageFor(model => model.CreatedAt) 
</div> 

入力フォームにテキストボックスが表示されます。私はそれを表示したくない代わりに、コードの背後に設定する必要があります。どうやってやるの?

+0

私はあなたを誤解しているかもしれませんが、上記のコードをビューから削除し、そのメソッドにCreatedAtを設定するだけではどうですか? – WooHoo

+0

どのように? – hotcoder

+0

あなたのコントローラには、ビューをレンダリングするget要求を処理するメソッドがあります。また、通常は同じ名前で、属性がhttppostであるメソッドをコントローラ上に配置する必要があります。これは、提出されたときにページを処理するので、このメソッドの値を設定します。 – WooHoo

答えて

2

ASP.NET MVCには「コードビハインド」の概念はありません。あなたのビューからデータを送信し、それはあなたのコントローラで処理されます。

これがPOSTのアクションであれば、コントローラにデータを返すことができますし、そのデータをテキストボックスビューから非表示にすることもできます。あなたのビューで

、あなたは次の行でそれを置き換える必要があります。そして、

@Html.HiddenFor(m => m.CreatedAt, DateTime.Now); 

モデルがコントローラにPOSTされ、CreatedAtプロパティは、DateTime.Nowはに埋めています

。あなたが何かを投稿するとき、それはアクションメソッドに行くことがあります。

パブリッククラスMyController:コントローラ { は//他のもの

[HttpPost] 
public ActionResult Edit(Product product) 
{ 
    product.CreatedAt // should equal the DateTime.Now set when you created the View 
} 

}

またはあなたがそれPOST秒後、コントローラでそれを設定できます

パブリッククラスMyController:コントローラ { //他のもの

[HttpPost] 
public ActionResult Edit(Product product) 
{ 
    product.CreatedAt = DateTime.Now; 
} 

}

で問題が発生することがありますこの文脈ではを使用している場合は、必ずuse the work around in placeにしてください。

+0

@Hotcoder POSTはどのような動作をしていますか?あなたのルートはどのように見えますか? –

関連する問題