Recupere ClientId de Html.TextBoxFor em um EditorTemplates
-
28-10-2019 - |
Pergunta
Quero fazer um calendário com JQuery a partir de um EditorTamplates.Mas estou lutando para obter a id do texto de entrada vindo de Html.TextBoxFor.E como eu gostaria de ter mais de uma agenda em uma visualização, não posso atribuir esse valor diretamente e tenho que seguir o contexto do meu controle.
A vista:
<%@ 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>
E o modelo:
public class DateTimeModel
{
public DateTime Date { get; set; }
public bool IsEnabled { get; set; }
}
Até agora, tentei com MvContrib, mas quando esperava obter "Filter_StartDate_Date", recebo apenas "Date".
Você tem alguma ideia brilhante para resolver isso?
obrigado antecipadamente,
[Editar]
Eu adicionei o seguinte à minha visualização:
<% Guid ControlGuid = Guid.NewGuid(); %>
<%= this.TextBox(x=> x.Date.ToShortDateString()).Id(ControlGuid.ToString()) %>
<script>
var CalendarTBId = '<%= ControlGuid %>';
</script>
Mas eu não gosto disso.Parece um hack para a vista para mim.O que você acha?
[/ Editar]
Solução
Veja esta pergunta: obtenha o clientid gerado para um campo de formulário , esta é minha resposta:
Eu uso este ajudante:
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)));
}
}
Use-o como faria com qualquer outro auxiliar: @ Html.ClientIdFor (model=> model.client.email)