Recuperar ClientId de Html.TextBoxFor en un EditorTemplates
-
28-10-2019 - |
Pregunta
Quiero hacer un calendario con JQuery a partir de EditorTamplates.Pero estoy luchando para obtener la identificación del texto de entrada que proviene de Html.TextBoxFor.Y como me gustaría tener más de un calendario en una vista, no puedo asignar ese valor directamente y tengo que seguir el contexto de mi control.
La 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>
Y el modelo:
public class DateTimeModel
{
public DateTime Date { get; set; }
public bool IsEnabled { get; set; }
}
Hasta ahora he intentado con MvContrib, pero cuando esperaba obtener "Filter_StartDate_Date", recibo solo "Date".
¿Tiene alguna idea brillante para resolver eso?
gracias de antemano,
[Editar]
He añadido lo siguiente a mi vista:
<% Guid ControlGuid = Guid.NewGuid(); %>
<%= this.TextBox(x=> x.Date.ToShortDateString()).Id(ControlGuid.ToString()) %>
<script>
var CalendarTBId = '<%= ControlGuid %>';
</script>
Pero no me gusta.Me parece un truco a la vista.¿Qué opinas?
[/ Editar]
Solución
Consulte esta pregunta: obtenga el ID de cliente generado para un campo de formulario , esta es mi respuesta:
Yo uso este ayudante:
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)));
}
}
Úselo como lo haría con cualquier otro ayudante: @ Html.ClientIdFor (model=> model.client.email)