2011-10-19 22 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); 

然後,當模型被髮布到控制器,該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的樣子是什麼樣的?你的路線是什麼樣的? –