OK У меня проблема с MVC, где у меня есть контроллеры/представления, прикрепленные к нескольким моделям, которые содержат защищенные внутренние наборы для строк. Когда эти объекты создаются, мне нужно, чтобы строки могли быть установлены. Сказав, что у меня возникают проблемы с пониманием ModelBinding для достижения этого. Я приложил очень простой набор для ModelBinder, но не знаю, куда идти отсюда:Model Binding строковые поля в MVC
/// <summary>
/// Handles binding for the string variables
/// </summary>
public class ActionResultModelBinder : DefaultModelBinder, IModelBinder, ITypedModelBinder
{
#region Properties
/// <summary>
/// Gets the type that this model binder's associated with
/// </summary>
/// <value>
/// The type that this model binder's associated with.
/// </value>
public Type AssociatedType
{
get
{
return typeof(string);
}
}
#endregion Properties
#region Methods
/// <summary>
/// Binds the model by using the specified controller context and binding context.
/// </summary>
/// <param name="controllerContext">The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data.</param>
/// <param name="bindingContext">The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider.</param>
/// <returns>
/// The bound object.
/// </returns>
/// <exception cref="T:System.ArgumentNullException">The <paramref name="bindingContext "/>parameter is null.</exception>
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var boundValue = base.BindModel(controllerContext, bindingContext);
return bindingContext.ModelType == typeof(string);
}
/// <summary>
/// Sets the specified property by using the specified controller context, binding context, and property value.
/// </summary>
/// <param name="controllerContext">The context within which the controller operates. The context information includes the controller, HTTP content, request context, and route data.</param>
/// <param name="bindingContext">The context within which the model is bound. The context includes information such as the model object, model name, model type, property filter, and value provider.</param>
/// <param name="propertyDescriptor">Describes a property to be set. The descriptor provides information such as the component type, property type, and property value. It also provides methods to get or set the property value.</param>
/// <param name="value">The value to set for the property.</param>
protected override void SetProperty(ControllerContext controllerContext, ModelBindingContext bindingContext, PropertyDescriptor propertyDescriptor, object value)
{
if (propertyDescriptor.PropertyType == typeof(string))
{
var stringVal = value as string;
}
base.SetProperty(controllerContext, bindingContext, propertyDescriptor, value);
}
#endregion Methods
}