Я хотел бы передать понятное имя для поля, связанного с используемым экземпляром MandatoryIntBinder
Вам необходимо каким-то образом добавить его в BindingContext. Делать это в общем случае немного сложновато, но для конкретного c случая передачи понятного имени это уже учитывается используемым ModelBinderAttribute
.
Если вы укажете Свойство Name
в attibute выглядит следующим образом:
namespace TestWebApp.Models
{
public class ExperimentalViewModel
{
[ModelBinder(typeof(MandatoryIntBinder), Name = "Test Mandatory Int")]
public int MandatoryInt { get; set; }
}
}
Это будет доступно в связывателе вашей пользовательской модели BindModelAsync
как bindingContext.BinderModelName
.
Если вам все еще нужно использовать Исходное название модели из вашей папки (например, чтобы получить значение из коллекции форм), вы можете получить к нему доступ через bindingContext.ModelMetadata.Name
или bindingContext.ModelMetadata.PropertyName
.
Можно ли предоставить параметры для связывателя пользовательской модели, на который есть ссылка в атрибуте. Net Core?
Name
- это единственное другое свойство в ModelBinderAttribute
. Если вы хотите передать произвольные параметры в пользовательский связыватель для отдельных свойств, вы можете добавить их через дополнительные атрибуты, к которым можно получить доступ из связывателя модели одним из следующих способов:
- Внутри пользовательского связывателя приведите
bindingContext.ModelMetadata
к DefaultModelMetadata
и получите доступ к свойству Attributes
напрямую (это, возможно, хрупко, но практически вряд ли сломается) - Реализуйте свой собственный IMetadataDetailsProvider, который может смотреть на атрибуты и заполнять метаданные, доступные для подшивки наиболее подходящий, но он может заполнять только
BindingMetadata
, который имеет только несколько доступных для записи свойств (большинство из которых могут быть установлены другими атрибутами через встроенные поставщики метаданных по умолчанию). IDisplayMetadataProvider
может заполнить DisplayMetadata
, который содержит свойство IDictionary<object,object> AdditionalValues
, которое может содержать произвольные данные. Обратите внимание, что эти данные также будут доступны в представлениях (которые вам, возможно, не нужны, но не должны вызывать каких-либо проблем). IValidationMetadataProvider
может заполнять ValidationMetadata
, который содержит свойство IList<object> ValidatorMetadata
, который может содержать произвольные данные. Очевидно, больше подходит для использования во время проверки, но тот факт, что это IList, а не IDictionary, делает несколько менее удобным извлечение данных обратно.