2011-02-05 2 views
0

사용자 지정 클래스 이름이 필요하므로 DateTime 템플릿을 재정의하려고합니다.내 템플릿을 존중하는 메타 태그를 만드는 방법은 무엇입니까?

그래서 내가

[DataType(DataType.Date)] 
    public DateTime Date { get; set; } 

그래서 나는 확실하지 않다

@model System.DateTime 

@Html.TextBox("", Model, new { @class = "date-picker" }) 

// 내보기 모델에 datetime.cshtml가 어떻게 그냥 내 메타 태그를 사용하기 위해/내 edittemplates이 있고 날짜 만 사용하십시오. 예, 그것을 하드 코딩 할 수 있고 Mode.ToShortDate()하지만 어쩌면 내가 ToLongdate() 한 번 원할 것입니다.

편집

나는 사람들이 혼란스러워지고 생각합니다. 먼저 기본 datetime을 재정의하는 이유를 보여주기 위해 클래스 이름을 무시했습니다.

이 클래스 이름을 하드 코딩하는 것은 나에게 해결책처럼 보이지 않는다. 왜 내가 정말로이 템플릿을 사용하고 대신 textboxfor()를 사용하는지 알아 내려고 노력하고있다.

문제는 "날짜"부분 만 표시하기 때문에 "날짜"를 문자열로 변경해야한다는 것입니다. 이제 문자열을 datetime으로 변환하여 나중에 db에 삽입 할 수있게되었습니다. 템플릿을 사용하여 datetime으로두고 변환을 저장할 수 있습니다.

제게는 모든 datetime에는 동일한 클래스 이름과 동일한 html 속성이 필요하다고 생각하는 것은 이상합니다. 이러한 editorFor()는 실제로 html 속성을 가져야합니다.

두 번째 내 전체 게시물이이. 나는 날짜 템플릿을 무시하고이

[DataType(DataType.Date)] 
    public DateTime Date { get; set; } 

하지 않으면

는 렌더링 결과는 날짜 부분을 보여줍니다. 이제 datetime을 재정의하면 내 사용자 정의 항목을 추가 할 수 있고 위의 내용은 메타 태그를 존중하지 않고 전체 datetime을 렌더링합니다.

제 질문은 어떻게 만들어서 메타 태그를 사용합니까? 이후로 내가 가지고있는 모든 날짜 필드는 날짜 만 표시합니다. 그래서 하드 코딩 같은 것을 템플릿으로 바보가 될 것입니다.

답변

0

방금 ​​예제를 다시 작성했으며 예상대로 작동하는 것으로 보입니다.

보기에서 당신은 정상적으로 날짜 속성을 바인딩하고 있습니까?

@Html.EditorFor(model => model.Date) 

만약 당신이 그것을 원한다면 당신이 원하는대로 작동합니다. 그러나 여전히 작동하지 않는다면 다른 것을 시도해 볼 수 있습니다. 모델에 다음 특성을 추가합니다.

[UIHint("ToLongDate")] 
public DateTime Date { get; set; } 

그런 다음 ToLongDate.cshtml라는 edittemplates 폴더에 새 PartialView을 만들고 다음 줄을 추가;

@model System.DateTime 
@Html.TextBox("", Model.ToLongDateString(), new { @class = "date-picker" }) 

이 기술을 사용하면 다양한 날짜 형식을 만들 수 있으며 각 속성마다 다른 형식을 사용할 수 있습니다.

+0

이 정말 작동합니까 속성을? MVC ToLongDateString()에 대한 호출을 기반으로 템플릿을 식별 할 수 있습니까? – mare

+0

ToLongDateString()에 대한 호출이 아니며 [UIHint] 특성에서 제공하는 템플릿의 이름입니다. 이 예제에서는 Views/EditTemplates에서 "ToLongDate"라는 템플릿을 찾을 것입니다. 나는 무엇이라도 부를 수 있었지만 그것을 해결하고 있던 문제와 관련되게하고 싶었다. 그래서 우리는 "ToShortDate"라는 다른 템플릿을 만들 수 있습니다. – davidferguson

+0

그리고 이것이 가장 좋은 방법이라고 생각하지 않습니다. 누군가 언젠가 그가 독일, 영국, 미국 및 일본 날짜를 가질 필요가 있다고 결정한다면 어떨까요? 형식이 지원됩니까? * n * 개의 템플릿을 만들 계획입니까? @ Html.Text ("", Model.ToLongDateString(), ...)의 – mare

0

내가 할 가장 쉬운 방법은 추가보기 데이터를 허용하는 EditorFor() 오버로드를 사용하는 것입니다. 이 오버로드를 사용하여 뷰 데이터를 템플릿에 보낼 수 있습니다. 당신은 날짜 형식 문자열을 보내 다음과 같이 텍스트 상자 렌더링 수 :

@Html.TextBox("", Model.ToString(ViewData["format"].ToString()), new { @class = "date-picker" }) 
다음

http://msdn.microsoft.com/en-us/library/8kb3ddd4.aspx

0

나는 그것이 이전 게시물 알고있는 모든 가능한 날짜 형식 문자열을하지만이 어쩌면을 너에게 필요한 대답. 그것은 당신이 HTML을 추가 할 수 있도록 모델의 사용자 지정 특성을 사용하고는보기

http://aspadvice.com/blogs/kiran/archive/2009/11/29/Adding-html-attributes-support-for-Templates-2D00-ASP.Net-MVC-2.0-Beta_2D00_1.aspx

+0

예. 나는 그것을 시험해 볼 것을 보았습니다. 나는 그것이 작동 할 것이지만 가능한 것은 아닌 것 같은 것들을 오버라이드 할 수 있기를 바랬다. 게시물에 무엇을 시도해 볼 것이지만 작동하는지는 볼 수 있지만 문자열, int, datetime 및 기본적으로 사용자 정의 클래스 이름이나 html 속성이 필요한 모든 작업을 수행해야하므로 많은 작업이 필요합니다. – chobo2

+0

당신의 권리는 기본적으로 거기에 있어야 할 무언가를 위해 많은 일을하는 것처럼 보입니다. 나는 다른 누군가가 더 나은 해결책을 제공 할 수 있다면 대안에 관심이있을 것이다. – davidferguson

관련 문제