Tenía una función agradable que tomaba mi FormCollection (proporcionada por el controlador). Ahora quiero hacer un enlace de modelo en su lugar y hacer que mi carpeta de modelo llame a esa función y necesite FormCollection. Por alguna razón, puedo encontrarlo. Pensé que habría sido controllerContext.HttpContext.Request.Form
Obtener FormCollection out controllerContext para el Custom Model Binder
8
A
Respuesta
15
Prueba esto:
var formCollection = new FormCollection(controllerContext.HttpContext.Request.Form)
FormCollection es un tipo añadimos a ASP.NET MVC que tiene su propia ModelBinder. Puede ver el código de FormCollectionBinderAttribute para ver a qué me refiero.
0
Utilice bindingContext.ValueProvider (y bindingContext.ValueProvider.TryGetValue, etc.) para obtener valores directamente.
1
El acceso a la colección de formularios parece estar mal visto. El siguiente es un ejemplo de un proyecto de MVC4 en el que tengo una Razor EditorTemplate personalizada que captura la fecha y la hora en campos de formulario separados. La carpeta personalizada recupera los valores de los campos individuales y los combina en un DateTime
.
public class DateTimeModelBinder : DefaultModelBinder
{
private static readonly string DATE = "Date";
private static readonly string TIME = "Time";
private static readonly string DATE_TIME_FORMAT = "dd/MM/yyyy HH:mm";
public DateTimeModelBinder() { }
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (bindingContext == null) throw new ArgumentNullException("bindingContext");
var provider = new FormValueProvider(controllerContext);
var keys = provider.GetKeysFromPrefix(bindingContext.ModelName);
if (keys.Count == 2 && keys.ContainsKey(DATE) && keys.ContainsKey(TIME))
{
var date = provider.GetValue(string.Format("{0}.{1}", bindingContext.ModelName, DATE)).AttemptedValue;
var time = provider.GetValue(string.Format("{0}.{1}", bindingContext.ModelName, TIME)).AttemptedValue;
if (!string.IsNullOrWhiteSpace(date) && !string.IsNullOrWhiteSpace(time))
{
DateTime dt;
if (DateTime.TryParseExact(string.Format(System.Globalization.CultureInfo.CurrentCulture, "{0} {1}", date, time),
DATE_TIME_FORMAT,
System.Globalization.CultureInfo.CurrentCulture,
System.Globalization.DateTimeStyles.AssumeLocal,
out dt))
return dt;
}
}
return base.BindModel(controllerContext, bindingContext);
}
}
Cuestiones relacionadas
- 1. ASP.NET MVC Model Binder devuelve el objeto nulo
- 2. Uso de Dependency Injection en ASP.NET MVC3 Model Binder
- 3. Extender ASP.NET MVC 2 Model Binder para trabajar con 0, 1 booleanos
- 4. ActionDescriptor from ControllerContext
- 5. ¿Cómo burlarse del ControllerContext usando moq? Error al burlarse del ControllerContext
- 6. Expresión de Linq para filtrar formcollection
- 7. HttpContext Y ControllerContext en MVC
- 8. asp.net mvc formcollection
- 9. ¿Cómo obtener Ribbon custom Tabs IDs?
- 10. Obtener atributo model por attribute_code en Magento
- 11. PHP PDO no puede obtener el valor del parámetro OUT
- 12. Ventajas del uso de Binder para IPC en Android
- 13. ControllerContext y ViewData Outside Scope of Controller - MVC3 C#
- 14. Parámetro In-Out para SqlCommand
- 15. Custom Caret para WinForms TextBox
- 16. Custom DatePicker
- 17. .NET MVC 3 Custom Decimal? Carpeta modelo
- 18. WPF Toolkit DataGrid Multi-Select: ¿Cómo obtener Selected Items out?
- 19. django model/modelForm - ¿Cómo obtener opciones dinámicas en choiceField?
- 20. Custom ResourceProviderFactory Dependency Injection
- 21. FormCollection Vacío en el formulario publicado en ASP.NET-MVC
- 22. Custom 'ExportFactory'
- 23. VS2010 Custom MarkupExtension
- 24. Python ftplib time out
- 25. ¿Qué alternativas hay para Model-View-Controller?
- 26. Atributo de clasificación predeterminado para Doctrine Model
- 27. Algún algoritmo para el juego "Voltear todo" (Light Out)?
- 28. Cómo deshago el check out en TFS para ex empleados
- 29. Razones para NO aumentar el tamaño frente a -out?
- 30. Custom MVC AuthorizeAttribute para ASP.NET Web API