我已经厌倦了修复这个错误,但什么都不起作用。
以下是错误信息:
System.InvalidOperationException: 可空对象必须有一个值。
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource) at System.Nullable1.get_Value() at 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
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary2 parameters) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<InvokeActionMethodWithFilters>b__12() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func
1 continuation) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass15.<>c__DisplayClass17.b__14() at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList1 filters, ActionDescriptor actionDescriptor, IDictionary
2 parameters) at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
以下是我的代码:
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);
}
请注意:这个代码在Visual Studio的开发环境中运行良好,但是在部署到服务器上时却无法正常运行。
TransactionItem.IcV
的类型是什么?如果是decimal?
,则使用GetValueOrDefault
而不是强制转换(对于所有其他属性也是如此)。 - Alessandro D'AndriaNullable<T>
,它是null
。然后显式转换为十进制会抛出异常。 - Tim Schmelter