Système.InvalidOperationException: Nullable objet doit avoir un value.ASP.NET MVC
Je suis fatigué de réparer cette erreur, mais rien ne fonctionne.
Voici l'erreur:
Système.InvalidOperationException: Nullable objet doit avoir une valeur.
au Système.ThrowHelper.ThrowInvalidOperationException(ExceptionResource
de ressources) au Système.Nullable1.get_Value() at
2 paramètres) à
Finance.Calculator.Presentation.Admin.Areas.HDGS.Controllers.TransactionController.Edit(Int64
TransactionId, String returnURL) in
d:\BuildAgent2\work\83d988abf03ace44\Code\Presentation\Finance.Calculator.Presentation.Admin\Areas\HDGS\Controllers\TransactionController.cs:line
44 at lambda_method(Closure , ControllerBase , Object[] ) at
System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase
controller, Object[] parameters) at
System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext
controllerContext, IDictionary
Système.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary2
1 suite) au
parameters) at
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext preContext, Func
Système.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14()
au
Système.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList1 filters, ActionDescriptor actionDescriptor,
2 paramètres) à
IDictionary
Système.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, Chaîne actionName)
Voici mon Code:
public ViewResult Edit(string TId, string returnURL)
{
long tid = !string.IsNullOrEmpty(TId) ? Convert.ToInt64(TId) : Convert.ToInt64(Request.QueryString["TId"].ToString());
var TransactionItem = db.HDGSAccTransaction.SingleOrDefault(t => t.TransactionID.Equals(tid));
TransactionVM oTrns = null;
if (!string.IsNullOrEmpty(returnURL))
{
TempData["ReturnUrl"] = returnURL;
}
if (TransactionItem != null)
{
oTrns = new TransactionVM
{
TRef = TransactionItem.dimTransaction.TRef,
Yr = TransactionItem.Yr,
IcV = (decimal)TransactionItem.IcV,
OFv = (decimal)TransactionItem.OFv,
OCBv = (decimal)TransactionItem.OCBv,
OOBv = (decimal)TransactionItem.OOBv,
OInv = (decimal)TransactionItem.OInv
};
}
return View(oTrns);
}
Veuillez Noter: Ce code fonctionne très bien dans l'environnement de développement de Visual Studio, mais pas sur les serveurs lorsqu'il est déployé.
Quel est le type de
TransactionItem.IcV
? si c'est decimal?
utilisation GetValueOrDefault
au lieu de cast (même pour tous les autres accessoires).Valamas - AUS: Merci. Mais cela fonctionne très bien dans mon dev machine et pas sur le serveur. C'est pourquoi je n'ai pas de conseils
je suppose que la raison pour laquelle vous obtenez seulement sur votre serveur, c'est que les variables ont des valeurs différentes. Je suppose que vous avez un
Nullable<T>
qui est null
. Puis le cast explicite décimal lève l'exception.OriginalL'auteur Todd Wilson | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
Je suppose que la raison pour laquelle il est seul à travailler sur votre environnement de développement est que les variables ont toujours une valeur et sur votre serveur les nullable sont
null
.Si un
Nullable<T>
estnull
vous ne pouvez pas exprimés explicitement le type de valeur que vous obtenez votre exception "Nullable objet doit avoir une valeur". (Démo)Afin de ne pas les jeter. Quelle est la valeur que vous voulez utiliser à la place de
null
, vous pouvez utiliserdecimal.MinValue
:Pour ce que ça vaut, ici, est une méthode d'extension:
Ensuite, vous pouvez désormais utiliser ce:
Salut Tim. Si vous voyez mon code il y a une condition où TId ne peut pas être trouvé dans le
db.HDGSAccTransaction
Dans ce cas, je suis l'affichage d'un message au sujet de la non-existence de cette TId et le "Retour à la Précédente". Même pour ces opérations, j'obtiens cette erreur.je ne vois pas le code où vous afficher un message. Cependant, je ne comprends pas comment
if (TransactionItem != null)
est lié à ce. Qui vérifie juste siTransactionItem
estnull
, pas siTransactionItem.IcV
estnull
(ou les autres nullable propriétés).Tim: C'est lorsque l'null
viewModel object
va à la vue et à l'intérieur je suis de vérifier si le modèle est null. Son point de vue. C'est juste pour vous informer que j'obtiens la même erreur, même siTransactionItem
est nullje ne suis pas familier avec MVC, donc je ne sais pas ce qui peut également être la cause de cette méthode.
TransactionID.Equals
ne devraient pas jeter même siTransactionID
est nullable propriété qui estnull
.OriginalL'auteur Rango
J'ai juste eu des affrontements avec un similaires problème, où le modèle de base de données, générées dans le cadre de l'entité, diffère du modèle de domaine. La différence est à savoir dans le nullable des biens d'une valeur entière.
Pour résoudre ce problème, la convention de nullable devait être alligned aussi pour les deux le modèle de base de données et le modèle de domaine.
OriginalL'auteur theodor.johannesen
Je voulais obtenir un Nullable SQL Server de l'Argent de type de données à afficher en lecture seule d'affichage que 2 décimales:
J'ai pris le modèle à venir dans c.AmountAgreedOn) et là, dans la vue à l'intérieur de la lignes de la td, j'ai mis ceci:
Donc j'ai eu un "" pour l'affichage de la valeur si aucun montant d'argent encore entré.
ensuite. . . . . lors de l'ouverture de cette de modifier ou d'ajouter de la valeur dans le modèle.cs de la classe j'ai mis au-dessus de la "AmountAgreedOn":
Si vous souhaitez signe dollar ( ne l'ai pas fait, parce qu'il a sali avec enregistrement de type décimal), changement ApplyFormatInEditMode à "true".
Pas assez, mais je ne pouvais pas comprendre de toute autre manière. Je n'arrive pas à le savant fou des trucs.
OriginalL'auteur JustJohn