Recupera ClientId da Html.TextBoxFor in un EditorTemplates
-
28-10-2019 - |
Domanda
Voglio creare un calendario con JQuery da un EditorTamplates.Ma sto lottando per ottenere l'id del testo di input proveniente da Html.TextBoxFor.E poiché vorrei avere più di un calendario in una vista, non posso assegnare direttamente quel valore e devo seguire il contesto del mio controllo.
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>
E il modello:
public class DateTimeModel
{
public DateTime Date { get; set; }
public bool IsEnabled { get; set; }
}
Finora ho provato con MvContrib, ma quando mi sarei aspettato di ottenere "Filter_StartDate_Date", ricevo solo "Date".
Hai idee brillanti per risolverlo?
grazie in anticipo,
[Modifica]
Ho aggiunto quanto segue alla mia visualizzazione:
<% Guid ControlGuid = Guid.NewGuid(); %>
<%= this.TextBox(x=> x.Date.ToShortDateString()).Id(ControlGuid.ToString()) %>
<script>
var CalendarTBId = '<%= ControlGuid %>';
</script>
Ma non mi piace abbastanza.A me sembra un trucco per la vista.Cosa ne pensi?
[/ Modifica]
Soluzione
Vedi questa domanda: ottieni l'ID client generato per un campo modulo , questa è la mia risposta:
Uso questo helper:
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)));
}
}
Usalo come faresti con qualsiasi altro aiuto: @ Html.ClientIdFor (model=> model.client.email)