2010-03-12 11 views
2

J'ai remarqué que TextBoxFor helper restait vide s'il n'y avait pas de modèle, comme par exemple quand j'ai un CreateEdit ViewUserControl. Lorsque les champs d'affichage d'édition sont renseignés, les champs Créer sont vides mais restitués. Le problème est que TextBoxFor n'accepte pas d'ID différent pour son nom (le même que LabelFor et d'autres, mais pour LabelFor, j'ai des helpers Html personnalisés).ASP.NET MVC TextBoxFor rendu d'assistance vide lorsque null

Donc, dans certains cas, nous devons toujours utiliser l'aide Html.TextBox régulière. Le problème est que si j'écris ceci

<%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 

une erreur se produit dans la vue Créer (évidemment).

donc je dois faire:

<% if (Model != null) %> 
    <%=Html.TextBox("postname", Model.PostCode.postname, new { @class = "postsDropDown" })%> 
    <% else %> 
    <%=Html.TextBox("postname", null, new { @class = "postsDropDown" })%> 

Maintenant, ce qui est quelque chose que je n'aime pas plus (de la FI).

Est-ce la seule façon de le faire? Je sais que je pourrais aussi étendre TextBoxFor helpers, mais cela me semble être un problème. En fin de compte, nous allons étendre tous les assistants "For", mais je pense que cela devrait être fait par l'équipe ASP.NET MVC déjà (intégré).

+0

S'il vous plaît aidez-moi à comprendre comment aidera résoudre le problème, comme en ce moment dans le cas actuel Problème est en évaluant Model.PostCode comme modèle est nul. Si vous utilisez Model.PostCode, il y aura une erreur sur l'évaluation avant même que l'appel ne soit fait –

+0

À mon avis, il s'agit d'un problème de conception de votre part. –

+1

@matt: Lorsque nous sommes dans la vue Créer, le modèle est évidemment nul parce que nous créons une nouvelle instance d'une entité Je ne vois pas en quoi cela pourrait être différent: fournir un objet vide au modèle serait problème de conception, je suppose .. – mare

Répondre

0

Si Model est null, puis essayez d'accéder Model.PostCode.postname va jeter un NullReferenceException, donc je ne pense pas que vous serez en mesure de le fixer dans TextBoxFor. Vous pouvez essayer de faire quelque chose comme Model != null && Model.PostCode != null ? Model.PostCode.postname : null mais c'est assez méchant :-(

Questions connexes