2013-07-30 7 views
2
@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly" }) 

내 날짜 텍스트 상자를 읽기 전용으로 표시합니다. 그러나 날짜와 시간이 모두 표시됩니다. IV가와) .ToShortTimeString를 (사용, 그래서 난 단지 날짜를 원하는 :.ToShortTimeString() .... 템플릿을 사용할 때만 사용할 수 있습니까?

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate.ToShortTimeString(), new { @readonly = "readonly" }) 

나는 오류 얻을 :

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

누구든지이 문제를 해결하는 방법을 알고 있습니까? 감사

+0

텍스트 상자 대신 텍스트 상자를 사용하십시오. – wudzik

+0

은 델타 표현식이 델리게이트 형식이 아니므로 'string'으로 변환하지 않습니다. – John

+0

들여 쓰기 된 코드 블록 대신 따옴표로'>'를 사용하십시오. –

답변

1

당신은 HtmlAttributes으로 포맷 날짜를 삽입 할 수 있습니다

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly", @Value = Model.ActiveDevice.LastUseDate.ToShortTimeString() }) 
+0

은 여전히 ​​화면에 날짜와 시간을 표시합니다. – John

+0

Really. 'value' 대신에'@Value'가되어야합니다. – YD1m

2

모델 바인더가 직렬화 수 있도록 TextBoxFor (뿐만 아니라 다른 템플릿 확장), 모델의 속성을 참조하는 표현이 필요하기 때문에이 문제가 발생 데이터 :

Need to verify the expression is valid; it needs to at least end in something that we can convert to a meaningful string for model binding purposes

(ModelMetadata.FromLambdaExpression에 관련 코드를 체크 아웃)

하나의 모델에 DisplayFormat 속성을 추가하고이 문제를 해결하는 방법은 여러 가지가 있습니다

:

@Html.TextBoxFor(x => x.ActiveDevice.LastUseDate, new { @readonly = "readonly" }) 
+0

이 모델에서 시도했습니다. 실제 페이지가로드되지 않습니다. 404는 과수원 CMS를 사용하는 것과 관련이 있어야합니다. – John

+0

public virtual DateTime LastUseDate {get; 세트; } ... 과수원 일 ...하지만 여전히 불행히도 12/12/2012 00:00:00으로 화면에 나타 납니까? 답장을 보내 주셔서 감사합니다 ... 어떤 아이디어? – John

+0

가상화가 필요한 이유를 이해하지 못합니까? 당신의 문제는 다른 곳에 완전히있을 수 있습니다. 어쨌든 -'[DataType (DataType.Date)]'를 추가하여 그 차이가 있는지 확인하십시오. 나는 그 대답에 덧붙였다. 하지만 오차드 (Orchard)가 렌더링을 오버라이드 (override) 할 가능성이 있습니다. 그런 다음 코드를 디버그 할 수 있습니다. – andreister

0

덕분에 :

[DataType(DataType.Date)] //try this as well? maybe Orchard intervenes into rendering... 
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
public DateTime LastUseDate { get; set; } 

그리고 당신이 평소와 같이 속성을 사용하여 뷰입니다 andreister에서 도움을 받아 문제를 해결할 수있었습니다. '텍스트 상자'로 변경하고 람바를 삭제하고 텍스트 상자에 따옴표로 묶어 추가 한 광고 :

@Html.TextBox("LastUseDate", Model.ActiveDevice.LastUseDate.ToShortDateString(), new { @readonly = "readonly" }) 
+0

생성 된 HTML 이름 등을 테스트하기 위해 컴파일러에 의존 할 수 있도록 유형이 안전한'For <..> '메소드를 권하고 싶습니다. ,'TextBoxFor (x => x.LastUseDate1, ...)'는 즉시 컴파일되지 않지만'TextBox ("LastUseDate1", ...)'그러면 작업을 수행하거나 페이지를 렌더링하십시오. 'TextBoxFor'가 어떤 이유로 든 당신을 위해 작동하지 않기 때문에 당신이 사용하는 것 같지만 안전하지 않은'TextBox'에 숨기보다는 실제 문제를 확인하고 수정하는 것이 더 낫습니다 :) – andreister

관련 문제