System.InvalidOperationException: Nullable Objekt muss einen value.ASP.NET MVC
Ich bin es müde, die Festsetzung dieser Fehler, aber nichts funktioniert.
Hier ist der Fehler:
System.InvalidOperationException: Nullable Objekt muss einen Wert haben.
System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource -
resource) bei System.Nullable1.get_Value() at
2-Parameter) bei
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
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext
controllerContext, ActionDescriptor actionDescriptor, IDictionary2
1 continuation) bei
parameters) at
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12()
at
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter
filter, ActionExecutingContext preContext, Func
System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14()
bei
System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext
controllerContext, IList1 filters, ActionDescriptor actionDescriptor,
2-Parameter) bei
IDictionary
System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext
controllerContext, String actionName)
Hier ist mein 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);
}
Bitte Beachten Sie: Dieser code läuft Prima in der Entwicklungsumgebung von Visual Studio, aber nicht auf den Servern, wenn es bereitgestellt wird.
Was ist der Typ von
TransactionItem.IcV
? wenn es decimal?
verwenden GetValueOrDefault
anstelle von cast (gleich für alle anderen Requisiten).Valamas - AUS: Danke. Aber dies funktioniert gut in meine dev-Maschine und nicht auf dem server. Das ist, warum ich don ' T haben irgendwelche Tipps
ich denke, dass ist der Grund, warum man es nur auf deinem server ist, dass die Variablen unterschiedliche Werte haben, da. Ich nehme an, Sie haben eine
Nullable<T>
die null
. Dann ist die explizite Umwandlung nach dezimal wirft die Ausnahme.
InformationsquelleAutor Todd Wilson | 2014-07-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, der Grund, warum es nur die Arbeit an der Entwicklungsumgebung ist, dass die Variablen haben immer einen Wert da, und auf Ihrem server die nullables sind
null
.Wenn ein
Nullable<T>
istnull
Sie nicht wirken explizit auf den Wert geben, denn Sie erhalten die Ausnahme "Nullable Objekt muss einen Wert haben". (Demo)Also nicht casten. Welchen Wert möchten Sie zu verwenden, anstatt
null
könnten Siedecimal.MinValue
:Für was es Wert ist, hier ist eine Erweiterung-Methode:
Dann können Sie von nun an verwenden:
Hi Tim. Wenn Sie sehen, dass mein code es ist ein Zustand, bei dem TId nicht gefunden werden kann in der
db.HDGSAccTransaction
In diesem Fall bin ich für die Anzeige einer Nachricht über die nicht-Existenz dieses TId und "Back to Previous" - link. Auch für diese Transaktionen ich bin immer diese Fehlermeldung.ich sehe nicht den code, wo du diplay eine Nachricht. Aber ich verstehe nicht, wie
if (TransactionItem != null)
ist damit verbunden. Das prüft nur, obTransactionItem
istnull
nicht, wennTransactionItem.IcV
istnull
(oder der anderen Eigenschaften von nullable).Tim: Das ist, wenn der null -
viewModel object
geht auf Ansicht und in es ich bin der überprüfung, ob das Modell null ist. Sein Blick Teil. Dies ist nur um Sie wissen zu lassen, dass ich immer die gleichen Fehler, auch wennTransactionItem
null istich bin nicht so vertraut mit MVC, also ich weiß nicht, was kann auch dazu führen, dass in dieser Methode.
TransactionID.Equals
sollte nicht werfen, auch wennTransactionID
ist ein nullable-Eigenschaft, dienull
.InformationsquelleAutor Rango
Nur ich kämpfte mit einem ähnlichem problem, wobei das Datenbank-Modell, generiert in entity framework, Unterschied sich von dem domain-Modell. Der Unterschied war nämlich in der nullable-Eigenschaft für ein integer-Wert.
Um dieses Problem zu lösen, das übereinkommen der null-musste gerade steht gleichermaßen für das Datenbank-Modell und das domain-Modell.
InformationsquelleAutor theodor.johannesen
Wollte ich wieder eine null-SQL-Server-Money-Datentyp zu zeigen, bis im nur-Lesen-Anzeige von 2 Nachkommastellen:
Ich nahm das Modell kommt in (c.AmountAgreedOn) und rechts in der Ansicht innerhalb der Reihen von td ' s ich habe diese:
Also ich hab ein "" für die Anzeige Wert, wenn kein Geld Betrag noch eingetragen.
dann. . . . . beim öffnen dieses zum Bearbeiten oder hinzufügen von Wert in das Modell ein.cs-Klasse, ich habe dies über die "AmountAgreedOn":
Wenn Sie möchten, dollar-Zeichen, um zu zeigen ( nicht, weil es ein Durcheinander mit dem speichern der decimal-Typ), ändern ApplyFormatInEditMode auf "true".
Nicht schön, aber ich konnte nicht herausfinden, auf andere Weise. Ich weiß nur nicht, was der verrückte Wissenschaftler Zeug.
InformationsquelleAutor JustJohn