입력에 클래스를 추가하려고합니다.
작동하지 않습니다.
@Html.EditorFor(x => x.Created, new { @class = "date" })
답변
Html.EditorFor
템플릿 내부에 이해가되지 않는 클래스를 추가하면 많은 다른 태그를 가질 수 있습니다. 따라서 편집기 템플릿 내에 클래스를 할당해야합니다.
@Html.EditorFor(x => x.Created)
사용자 정의 템플릿에서 :
<div>
@Html.TextBoxForModel(x => x.Created, new { @class = "date" })
</div>
답변
ASP.NET MVC 5.1부터는 클래스를 추가 EditorFor
할 수 있습니다 (원래 질문은 ASP.NET MVC 3을 지정했으며 허용되는 답변은 여전히 고려 된 것 중 최고입니다).
@Html.EditorFor(x=> x.MyProperty,
new { htmlAttributes = new { @class = "MyCssClass" } })
참조 : ASP.NET MVC 5.1의 새로운 기능, 편집기 템플릿에 대한 부트 스트랩 지원
답변
일반 EditorFor에 대한 클래스를 설정할 수 없습니다. 원하는 편집기를 알고 있다면 바로 사용할 수 있으며 클래스를 설정할 수 있습니다. 사용자 정의 템플릿을 만들 필요가 없습니다.
@Html.TextBoxFor(x => x.Created, new { @class = "date" })
답변
당신이 사용할 수있는:
@Html.EditorFor(x => x.Created, new { htmlAttributes = new { @class = "date" } })
(적어도 ASP.NET MVC 5에서는 그렇지 않지만 ASP.NET MVC 3에서는 어떻게 작동했는지 알 수 없습니다.)
답변
나는 똑같은 좌절 문제를 겪었고 모든 DateTime 값에 적용되는 EditorTemplate을 만들고 싶지 않았습니다 ( jQuery UI 드롭 다운 캘린더가 아닌 시간을 표시하려는 UI에 시간이 있음 ). 내 연구에서 내가 겪은 근본적인 문제는 다음과 같습니다.
- 표준 TextBoxFor 도우미를 사용하면 눈에 잘 띄지 않는 jQuery UI 캘린더를 렌더링하기 위해 “날짜 선택 도구”의 사용자 정의 클래스를 적용 할 수 있었지만 TextBoxFor는 시간없이 DateTime의 형식을 지정하지 않아 달력 렌더링에 실패했습니다.
- 표준 EditorFor 는 DateTime을 형식화 된 문자열로 표시합니다 (와 같은 적절한 속성으로 장식되어
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
있지만 사용자 정의 “날짜 선택기”클래스를 적용 할 수는 없습니다.
따라서 다음과 같은 이점이있는 사용자 지정 HtmlHelper 클래스를 만들었습니다.
- 이 메소드는 DateTime을 jQuery 달력에 필요한 ShortDateString으로 자동 변환합니다 (시간이 있으면 jQuery가 실패 함).
- 기본적으로 도우미는 jQuery 캘린더를 표시하기 위해 필요한 htmlAttributes를 적용하지만 필요한 경우 재정의 할 수 있습니다.
- 날짜가 null 인 경우 ASP.NET MVC는 날짜를 1/1/0001의 값으로 설정합니다.
이 방법은 빈 문자열로 바꿉니다.
public static MvcHtmlString CalenderTextBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, object htmlAttributes = null)
{
var mvcHtmlString = System.Web.Mvc.Html.InputExtensions.TextBoxFor(htmlHelper, expression, htmlAttributes ?? new { @class = "text-box single-line date-picker" });
var xDoc = XDocument.Parse(mvcHtmlString.ToHtmlString());
var xElement = xDoc.Element("input");
if (xElement != null)
{
var valueAttribute = xElement.Attribute("value");
if (valueAttribute != null)
{
valueAttribute.Value = DateTime.Parse(valueAttribute.Value).ToShortDateString();
if (valueAttribute.Value == "1/1/0001")
valueAttribute.Value = string.Empty;
}
}
return new MvcHtmlString(xDoc.ToString());
}
그리고 date-picker
클래스 데코레이션을 사용하여 달력을 렌더링하는 객체를 찾는 JQuery 구문을 알고 싶은 사람들은 다음과 같습니다.
$(document).ready(function () {
$('.date-picker').datepicker({ inline: true, maxDate: 0, changeMonth: true, changeYear: true });
$('.date-picker').datepicker('option', 'showAnim', 'slideDown');
});
답변
AdditionalViewData를 통해 클래스 또는 기타 정보를 제공 할 수 있습니다. 사용자가 데이터베이스 필드 (propertyName, editorType 및 editorClass)를 기반으로 양식을 작성할 수있는 위치에서이 정보를 사용합니다.
초기 예를 기반으로 :
@Html.EditorFor(x => x.Created, new { cssClass = "date" })
사용자 정의 템플릿에서 :
<div>
@Html.TextBoxFor(x => x.Created, new { @class = ViewData["cssClass"] })
</div>
답변
EditorFor
속성이 어떤 태그, 특히 내장 편집기 템플릿의 속성으로 추가되는 익명 객체를 전달할 수 있는 재정의 는 없습니다 . 고유 한 사용자 정의 편집기 템플릿을 작성하고 추가 값으로 원하는 값을 전달해야합니다.
