2011-02-03 52 views
18

我正在使用asp.net mvc 3,並且我不斷收到此錯誤,但我不明白,因爲我沒有使用模板。當我嘗試這樣做時,獲取模板錯誤?

我在視圖模型

public class FormViewModel 
    { 
     public DateTime Due { get; set; } 


     public FormViewModel() 
     { 
      DueDate = DateTime.UtcNow;   
     } 
    } 

有這在我的部分觀點

@model ViewModels.FormViewModel 

    <div="tabs-1"> 
     @Html.TextBoxFor(x => x.Due.ToShortDateString()) 
    </div> 

,我得到這個錯誤

模板只能與現場 接入一起使用,財產訪問, 單維數組索引或 單電子參數自定義索引器 表達式。說明: 執行當前Web請求期間發生未處理的 異常。 請查看堆棧跟蹤以獲取更多有關該錯誤的信息,以及 源於代碼的更多信息 。

異常詳細信息: System.InvalidOperationException: 模板只能與現場 訪問,屬性訪問, 一維數組的索引,或者 單參數定製索引 表達式中使用。

回答

51

應該是這樣的:

@Html.TextBoxFor(x => x.Due) 

如果你想在這個日期一些格式:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)] 
public DateTime Due { get; set; } 

然後:

@Html.EditorFor(x => x.Due) 
的,如果你真的想

要使用此.ToShortDateString()方法,您需要使用非強類型PED助手(顯然這件事情我不推薦):

@Html.TextBox("Due", Model.Due.ToShortDateString()) 
+1

@Darin Dimitrov - 好吧我認爲我在那裏使用了一個壞例子,因爲它反正呈現爲字符串。說如果我想使用「ToShortDateString()」爲什麼我不能使用它? – chobo2 2011-02-03 22:10:17

+0

@ chobo2,你可以使用`DisplayFormat`屬性和`Html.EditorFor`助手指定格式。 – 2011-02-03 22:11:23

+0

@Darin Dimitrov - 所以我用什麼被認爲是模板?因此,任何助手都是模板,並且要改變它們,我要麼像Tomas Lycken所說的那樣編輯它們,要麼使用數據註釋來執行外觀? – chobo2 2011-02-03 22:18:50

5

你因爲.TextBoxFor() HTML輔助使用內置的模板(一個用於字符串輸入文本框)得到的錯誤,而你給它是一個太複雜的lambda表達式(即,不屬於消息中列出的一組類型)。

要解決此問題,請將要編輯的屬性的類型更改爲string,以便MVC可以使用默認的字符串模板,或者讓MVC使用默認的日期時間模板。我建議後者:

@Html.TextBoxFor(m => m.Due) 

如果你不快樂與您的用戶被要求修改日期的方式,放在〜/查看/共享/ EditorTemplates名爲「DateTime.cshtml」的局部視圖你在哪裏編輯編輯器,以便按照你想要的方式工作。

5

如果您正在使用MVC,並有一個內嵌代碼元素,可以嘗試設置參數,像這樣 -

@{ 
string parameterValue = DateTime.Parse(@item.Value).ToShortDateString(); 

} 

@Html.DisplayFor(model => parameterValue) 
6

存在過載,可以幫助實現這一目標,同時保持強類型。

// Specify that you're providing the format argument (string) 
@Html.TextBoxFor(x => x.Due, format: Model.Due.ToShortDateString()) 

// Or use the overload with format and html options, where null is the htmloptions 
@Html.TextBoxFor(x => x.Due, Model.Due.ToShortDateString(), null) 
0

您正在通過的textboxfor參數傳遞的方法,而不是通過一個表達誤導應用。

您有:

@Html.TextBoxFor(x => x.Due.ToShortDateString()) 

存儲你的結果在一個變量,然後使用表達式。嘗試這種

var shortDate = Model.Due.ToShortDateString(); 
@Html.TextBoxFor(x => shortDate) 
0

代替在模型中使用@Value註解如下添加格式的

@ Html.TextBoxFor(X => x.Due新{@值= Model.Due.ToShortDateString()})

相關問題