Avevo una buona funzione che richiedeva il mio FormCollection (fornito dal controller). Ora voglio fare un modello di binding e invece il mio modello di binder chiamerà quella funzione e ha bisogno di FormCollection. Per qualche motivo posso trovarlo. Ho pensato che sarebbe stato controllerContext.HttpContext.Request.Form
Recupera FormCollection controllerContext per Raccoglitore modello personalizzato
8
A
risposta
15
Prova questo:
var formCollection = new FormCollection(controllerContext.HttpContext.Request.Form)
FormCollection è un tipo che abbiamo aggiunto a ASP.NET MVC che ha una sua ModelBinder. Puoi vedere il codice per FormCollectionBinderAttribute per vedere cosa intendo.
0
Utilizzare bindingContext.ValueProvider (e bindingContext.ValueProvider.TryGetValue, ecc.) Per ottenere direttamente i valori.
1
L'accesso alla raccolta del modulo appare direttamente disapprovato. Di seguito è riportato un esempio di un progetto MVC4 in cui ho un Razor EditorTemplate personalizzato che acquisisce la data e l'ora in campi separati. Il raccoglitore personalizzato recupera i valori dei singoli campi e li combina in 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);
}
}
Problemi correlati
- 1. Il Raccoglitore modello personalizzato non viene attivato
- 2. Raccoglitore modello personalizzato per oggetti compositi complessi HELP
- 3. Utilizzo di un Raccoglitore modello personalizzato per stringhe HTML
- 4. Impostazione dei valori ModelState nel modello personalizzato raccoglitore
- 5. ASP.NET MVC - Raccoglitore modello personalizzato in grado di elaborare array
- 6. Raccoglitore modello MVC ASP.NET per tipo generico
- 7. Come filtrare i dati del modulo con il raccoglitore modello personalizzato
- 8. modello personalizzato legante per una proprietà
- 9. ActionDescriptor da ControllerContext
- 10. ASP.Net MVC Modello personalizzato Descrizione del binding
- 11. Come posso richiamare l'associazione modello predefinita all'interno di un raccoglitore personalizzato nell'API Web MVC4?
- 12. asp.net mvc formcollection
- 13. Raccoglitore di brani per Android
- 14. HttpContext E Controllercontext in MVC
- 15. Il raccoglitore modello di API Web non funziona con HttpPostedFileBase?
- 16. Raccoglitore modello predefinito e tipi complessi che includono un elenco
- 17. Unità modello di test personalizzato legante in ASP.NET MVC 2
- 18. Laravel recupera il modello associato in Richiesta
- 19. MPI - Broadcast/Raccoglitore asincrono
- 20. URL REST personalizzato per modello specifico
- 21. MVC 4 Modello personalizzato per bool (rasoio)
- 22. Django personalizzato Salva modello
- 23. Utilizzando un modello personalizzato legante per un argomento di un'azione di controllo
- 24. Aggiunta della funzionalità "radio" ai pulsanti quando si utilizza un raccoglitore personalizzato in Rivets.js con Backbone.js
- 25. Ottenere più caselle da elemento FormCollection
- 26. Guida modello WPF DatePickerTextBox personalizzato
- 27. Registrare un modello personalizzato legante in MVC 4
- 28. if..else tag modello personalizzato
- 29. Errori del modello personalizzato Yii
- 30. Ignora drupale Modello menu personalizzato