2010-10-22 4 views
3

Je rencontre un comportement de liaison irritant pour un DateTime lié à une zone de texte qui est désactivée. Il retourne toujours nul.ASP.NET MVC 2: désactivée TextBox pour DateTime renvoie null

Mon modèle a un DateTime? La propriété StartDate ... J'ai aussi essayé juste DateTime StartDate (sans le '?').

J'ai essayé les éléments suivants:

Tentative n ° 1:

<%: Html.TextBoxFor(model => model.StartDate, new { @disabled="true" })%> 

Tentative # 2:

<%: Html.EditorFor(model => model.StartDate, "DateDisabled")%> 

où DateDisabled est une vue partielle définie comme ceci:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %> 
<%: Html.TextBox("", Model.HasValue ? Model.Value.ToShortDateString() : "", new { @class = "text-box-short-disabled", @disabled = "true" })%> 

Tous mes tentatives renvoie une valeur nulle. Y a-t-il quelque chose qui me manque? Ou une solution de contournement?

Répondre

10

Les éléments d'entrée avec l'attribut disabled n'envoient jamais leur valeur au serveur lorsque le formulaire est soumis. Vous devez utiliser le lieu attribut readonly:

<%: Html.TextBoxFor(model => model.StartDate, new { @readonly = "readonly" }) %> 
+0

Dans mon cas, j'utilise un DropDownListFor qui génère un élément de sélection et il n'y a pas d'attribut lecture seule pour ce type d'élément. Je suppose que je dois gérer des valeurs nulles dans cette situation. Merci d'avoir indiqué le comportement de l'attribut désactivé, je l'ai imaginé et confirmé ici. – kzfabi