Question

Je veux faire un calendrier avec jQuery à partir d'un editOrtamplates. Mais j'ai du mal à obtenir l'ID du texte d'entrée provenant de html.textboxfor. Et comme je voudrais avoir plus d'un calendrier sur une vue, je ne peux pas attribuer cette valeur directement et je dois suivre le contexte de mon contrôle.

La vue :

<%@ 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>

Et le modèle:

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

Jusqu'à présent, j'ai essayé avec mvContrib, mais quand je m'attendais à obtenir "filter_startdate_date", je ne reçois que "date".

Avez-vous des idées brillantes pour résoudre ce problème?

Merci d'avance,

Éditer

J'ai ajouté ce qui suit à mon avis:

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

Mais je n'aime pas ça. Cela ressemble à un piratage à la vue. Qu'est-ce que tu penses?

/Éditer

Était-ce utile?

La solution

See this question: get the generated clientid for a form field, this is my answer:

I use this 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)));
    }
}

Use it just as you would any other helper: @Html.ClientIdFor(model=>model.client.email)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top