Question

When I'm creating a new SelectList, I (think only sometimes) see the defaultValueItemLabel option in SelectList.CreateDropDown(). The comment says

The label of the default-value item, which will appear first, and only if none of the list items have an ID with the default value. Do not pass null. If you pass the empty string, no default-value item will appear.

But my SelectList is of type int? and I have to pass it the selectedItemId anyway. So what "default" value is it talking about? How can there be a default value if I have to pass the selected value? I can guess that defaultvalueItemLabel is used when you want the user to be able to choose the null values of a nullable-type-based SelectList. But if that were true, then why can I also specify placeholderIsValid: true? Now I'll have two options the user can select that allow them to choose null? When is this useful?

Was it helpful?

Solution

The word default in defaultValueItemLabel refers to the default value of the ID data type, which is null for all reference types, like int?.

You're correct that defaultValueItemLabel and placeholderIsValid are both used to add an item with the default value of the ID type. But they differ in the way this item appears. With defaultValueItemLabel, the item will look normal. With placeholderIsValid: true, the item will appear as a placeholder, meaning it will have a grayed-out, faded appearance instead of looking like the other items. And also, as soon as another item is selected, an X button will appear to let the user reset the drop-down back to the placeholder.

If you specify both defaultValueItemLabel and placeholderIsValid: true, the former takes precedence, as explained in the placeholderIsValid documentation.

OTHER TIPS

You would specify the placeholderIsValid flag if you wanted an extra option such as "Other" that takes on the null value, in addition to having all of your other null items available, and eventually interpret all of those as just being an "Other" selection. Not very elegant, but probably useful to someone.

Better to give all the possible functionality rather than making some of it mutually exclusive, I say.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top