J'ai un Html.TextBox() et j'ai besoin de le désactiver dans certaines conditions. Avec le TextArea il va comme ceci:asp.net MVC: désactiver un TextBox
<%=primaryLang ? Html.TextArea("e.location", new { rows = 2, cols = 60 }) : Html.TextArea("e.location", new { rows = 2, cols = 60, disabled = "true" })%>
Mais avec TextBox il est impossible:
<%=primaryLang ?
Html.TextBox("e.startDate") :
Html.TextBox("e.startDate", new { disabled = "true"})%>
Il émettra {disabled = true} dans la valeur. C'est parce que la seule fonction qui vous permettra de passer le HtmlAttributes exigera également que le modèle soit passé. Ce point de vue est fortement typé, et le modèle est rempli automatiquement
Si je passe comme ceci:.
Html.TextBox("e.startDate", Model.e.startDate, new { disabled = "true"})
ou comme ceci:
Html.TextBox("e.startDate", null, new { disabled = "true"})
la version GET fonctionnera, mais la version POST émet une exception NullReferenceException. Les deux ci-dessus semblent avoir exactement le même effet. Les deux présenteront les données correctes du modèle sur GET.
Si je laisse la luxure comme ceci:
Html.TextBox("e.startDate")
il sera correctement, pour les deux POST et GET ...
Pourquoi? Des moyens d'accomplir?
Merci! :)
Merci aux réponses ci-dessous, je l'ai résolu comme ceci:
<%=primaryLang ?
Html.TextBox("e.startDate") :
Html.Hidden("e.startDate") + Html.TextBox("e.startDate", null, new { disabled = "true"})%>
Voilà, c'est génial! Je l'ai résolu et édité la question avec ma solution de contournement (la coller ici perd toute indentation et est illisible). – Palantir