Получить ClientId из Html.TextBoxFor в шаблонах Editor. - PullRequest
0 голосов
/ 23 марта 2011

Я хочу сделать календарь с JQuery из EditorTamplates. Но я борюсь с получением идентификатора входного текста из Html.TextBoxFor. И поскольку я хотел бы иметь более одного календаря для представления, я не могу назначить это значение напрямую и должен следовать контексту моего элемента управления.

Вид:

<%@ Control 
    Language="C#" 
    Inherits="MvcContrib.FluentHtml.ModelViewUserControl<DateTimeModel>"  %>

<%= Html.LabelFor(x=>x.Date) %>
<%= Html.TextBoxFor(x=>x.Date, new { @class="common-textbox-ui-calendar-tb"})%>

<script> 
    var CalendarTBId = '<%= this.IdFor(x=>x.Date) %>'; 
</script>

И модель:

public class DateTimeModel 
{
    public DateTime Date { get; set; }
    public bool IsEnabled { get; set; }
}

До сих пор я пытался с MvContrib, но когда я ожидал получить «Filter_StartDate_Date», я получаю только «Дата».

У вас есть какие-нибудь яркие идеи, чтобы решить это?

заранее спасибо,

[Изменить]

Я добавил к своему мнению следующее:

<% Guid ControlGuid = Guid.NewGuid(); %>
<%= this.TextBox(x=> x.Date.ToShortDateString()).Id(ControlGuid.ToString()) %>
<script> 
    var CalendarTBId = '<%= ControlGuid  %>'; 
</script>

Но мне это совсем не нравится. Это выглядит как взломать вид на меня. Что ты думаешь?

[/ Edit]

1 Ответ

3 голосов
/ 25 марта 2011

См. Этот вопрос: получить сгенерированный клиент для поля формы , это мой ответ:

Я использую этот помощник:

public static partial class HtmlExtensions
{
    public static MvcHtmlString ClientIdFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
    {
        return MvcHtmlString.Create(htmlHelper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression)));
    }
}

Используйте его простокак и любой другой помощник: @ Html.ClientIdFor (model => model.client.email)

...