Système.InvalidCastException: Impossible de convertir l'objet de type 'System.Int32 "pour le" type de Système.String'
J'ai été coincé à essayer de corriger de cette question. Je crois que l'erreur Se produit quand je suis en train de remplir une liste déroulante.
IEnumerable<Customer> values = db.Customers.SqlQuery("SELECT * FROM Customer").ToList().Cast<Customer>();
IEnumerable<SelectListItem> items =
from value in values
select new SelectListItem
{
Text = value.CustomerID.ToString(),
Value = value.CustomerID.ToString(),
};
ViewBag.Accounts = items;
Trace De La Pile
[InvalidCastException: Impossible de convertir l'objet de type 'System.Int32 "pour le" type de Système.Chaîne'.]
System.ComponentModel.DataAnnotations.StringLengthAttribute.IsValid(Object value) +46
System.ComponentModel.DataAnnotations.ValidationAttribute.IsValid(Object value, ValidationContext validationContext) +115
System.ComponentModel.DataAnnotations.ValidationAttribute.GetValidationResult(Object value, ValidationContext validationContext) +29
System.Web.Mvc.<Validate>d__15.MoveNext() +161
System.Web.Mvc.<Validate>d__1.MoveNext() +311
System.Web.Mvc.DefaultModelBinder.OnModelUpdated(ControllerContext controllerContext, ModelBindingContext bindingContext) +136
System.Web.Mvc.DefaultModelBinder.BindComplexElementalModel(ControllerContext controllerContext, ModelBindingContext bindingContext, Object model) +66
System.Web.Mvc.DefaultModelBinder.BindComplexModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +1314
System.Web.Mvc.DefaultModelBinder.BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) +416
System.Web.Mvc.ControllerActionInvoker.GetParameterValue(ControllerContext controllerContext, ParameterDescriptor parameterDescriptor) +317
System.Web.Mvc.ControllerActionInvoker.GetParameterValues(ControllerContext controllerContext, ActionDescriptor actionDescriptor) +117
System.Web.Mvc.Async.<>c__DisplayClass25.<BeginInvokeAction>b__1e(AsyncCallback asyncCallback, Object asyncState) +446
System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +302
System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30
System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +382
System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317
System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15
System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71
System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +249
System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50
System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155
Le problème pourrait être dans votre plâtre. Une raison pour laquelle vous avez le "Select *"? Pourquoi ne pas simplement db.Clients.ToList() puisque vous voulez toute la liste?
Quel est le problème avec le plâtre? il l'habitude de me permettre de le garder juste le Texte = valeur.CustomerID. Concernant le select * j'ai corrigé, c'était un bon point
Je voulais lancer à l'objet Client, qui ne devrait pas être nécessaire si vous évitez les SqlQuery. Le remplissage de la liste à l'aide de ToString() doit être fine.
Merci mais toujours pas de chance
afficher la trace de la pile
Quel est le problème avec le plâtre? il l'habitude de me permettre de le garder juste le Texte = valeur.CustomerID. Concernant le select * j'ai corrigé, c'était un bon point
Je voulais lancer à l'objet Client, qui ne devrait pas être nécessaire si vous évitez les SqlQuery. Le remplissage de la liste à l'aide de ToString() doit être fine.
Merci mais toujours pas de chance
afficher la trace de la pile
OriginalL'auteur kayze | 2013-10-06
Vous devez vous connecter pour publier un commentaire.
À en juger par le message de l'exception de votre Client de classe ressemble à quelque chose comme ça...
Notez que vous ne pouvez pas utiliser
StringLength
sur unint
propriété.Se débarrasser de la
StringLength
et la validation des exceptions devraient disparaître.Merci! C'est mon problème aussi. Alors, comment puis-je valide chose comme ça? avec une Regex?
ce n'est pas le lieu pour poser une question de suivi, je ne peux pas vous répondre pleinement dans un commentaire, il ne peut bien vous poser la question. Cependant, vous pourriez être à la recherche pour le
[RangeAttribute]
. Sinon, il est probable que votreint
n'est pas unint
.Que c'est drôle. J'ai eu un problème similaire en raison d'un
MaxLength
attribut sur un bien immobilier qui sert à être une chaîne de caractères, mais a ensuite été remaniée dans son propre modèle de vue.au lieu d'utiliser "StringLength(4)", vous pouvez simplement utiliser "Range(int min,int max)" Attribut.
OriginalL'auteur Aron