2011-05-12 47 views
20

我很難過,因爲我想格式化值併爲css類添加html屬性。Html.TextBoxFor格式或Html.EditorFor htmlAttributes?

如果我使用@Html.TextBoxFor(m => m.DateModified) - 我可以添加html屬性,但格式不能通過成員上的DisplayFormat屬性起作用。

如果我使用@Html.EditorFor(m => m.DateModified) - 格式化的作品,但如果我使用@Html.TextBox("DateModified", Model.DateModified, ...) 我不能添加HTML屬性

- 我得到空引用異常時型號爲空時,形式是在添加模式

是什麼實現這一目標的最佳方式

+0

感謝這個問題,我是有一點差異的問題,但你在問題中給出的解釋也幫助了我。不知道在EditoFor方法中,我無法提供html屬性,並且模型綁定在我的情況下以糟糕的方式工作......再次感謝。 – 2012-02-23 10:28:04

回答

17

我結束了由我的日期選擇器創建自定義編輯模板,所以解決這個:

共享/ EditorTemplates /約會時間。CSHTML

@model System.DateTime? 
@Html.TextBox("", Model.HasValue ? Model.Value.ToString("dd/MM/yyyy") : string.Empty, new { @class = "date-picker" }) 

然後在我原來的頁面繼續使用

@Html.EditorFor(m => m.DateModified) 
+2

不錯。對我很有幫助 - 我對此感到沮喪。 – itsmatt 2011-08-23 20:40:45

+0

我爲我自己的需求所做的唯一修改是添加'@ readonly =「readonly」'因爲我使用jQuery datetime選擇器 - 強制用戶選擇一個日期而不是擔心他們輸入某些愚蠢的東西。可能不適用於每個人或任何情況,但對我來說工作很好。 – itsmatt 2011-08-23 20:44:03

+0

雖然我確實注意到我這樣做的副作用是它很難清除日期。我可能會刪除那一點,因爲它使事情變得複雜。 – itsmatt 2011-08-23 20:46:48

10

你可以...

@Html.TextBoxFor(m => m.DateModified, new { Value = Model.DateModified.ToString("MM-dd-yyyy"), @class = "superCoolClassName"}) 
+7

謝謝你。我發現匿名類型「value」的第一個屬性實際上應該以大寫V(即「Value」)開始,否則它沒有影響。 – 2012-01-12 09:32:22

+0

正如你所知,添加一個Value(帶有大寫字母V)會產生一個值和一個Value屬性,當你用W3.org驗證器檢查你的標記時,它是無效的。 – Anton 2013-06-19 08:28:23

3

使用@ Html.EditorFor(M => m.DateModified),因爲否則DisplayFormat屬性不會有任何效果。

要添加更多屬性(如CSS類),您必須爲DateTime創建編輯器模板。 創建一個文件EditorTemplates/DateTime.cshtml具有以下內容:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new 
{ 
    @class="date" 
}) 

請注意,文本框的值不直接設置與模式,而是與TemplateInfo.FormattedModelValue,因爲該值將根據DisplayFormat屬性格式化,而Model則不會。 (這花了我很長時間才意識到:))

在簡單情況下,這可能就足夠了,如果CSS類對於所有日期編輯器可以是相同的。

如果要參數化屬性,也可以將屬性值參數傳遞給EditorFor。

@Html.EditorFor(m => m.DateModified, new { @class = "someClass" }) 

然而,該參數將被其它不能自動委託給HTML控件作爲屬性,但你必須在模板中「處理它」明確。根據我的經驗,你可以在模板中的ViewData訪問該參數值,所以參數化的模板看起來是這樣的:

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new 
    { 
     @class=ViewData["class"] 
    }) 
1

爲了防止硬編碼在EditorFor列出的鍵/值對,ViewData的對象轉換爲Dictionary並將該字典對象傳遞給TextBox。

@Html.EditorFor(m => m.DateModified, "Template", new { @class = "someClass", size=8 , htmlTag="custom" }) 

而且在模板中你有

@Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, ViewData.ToDictionary(c=>c.Key,c=>.Value)) 
0

要顯示在文本框JSON日期(CSHTML):

var d1 = ui.item.IssueDate; 
var d = new Date(parseInt(d1.slice(6, -2))); 
var Issdate = ("0" + (d.getMonth() + 1)).slice(-2) + '/' + 
       ("0" + d.getDate()).slice(-2) + '/' + 
       d.getFullYear().toString(); 
$('#IssueDate').val(Issdate); 
相關問題