2017-02-20 19 views
1

これは私のウェブサイトのエラーです。 Visual Studioでエラーは発生せず、コンパイルは正常です。これは、ウェブサイトをローカルで実行してボタンをクリックすると、Chromeやその他のブラウザでゾーンを表示するときに発生します。私はこれで完全に困惑しており、私は助けを求めていますか?大変感謝しています。無効なキャスト例外 - キャストが無効です

System.InvalidCastException: Specified cast is not valid. 
at MySite.Web.Areas.Mpa.Controllers.ZonesController.d__7.MoveNext() in C:\MySite\Development\routing_branch\src\MySite.Web\Areas\Mpa\Controllers\ZonesController.cs:line 125 
--- End of stack trace from previous location where exception was thrown --- 
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) 
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 
at System.Web.Mvc.Async.TaskAsyncActionDescriptor.EndExecute(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.b__36(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResultBase`1.End() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.b__3d() 
at System.Web.Mvc.Async.AsyncControllerActionInvoker.AsyncInvocationWithFilters.<>c__DisplayClass46.b__3f() 

これは私がライン125を示して呼び出しています方法です:

93 public async Task<PartialViewResult> MapViewModal() 
94 { 
95  int? impersonatorTenantId; 
96  int value; 
97  object obj; 
98  IZoneAppService zoneAppService = this._zoneAppService; 
99  if (this.AbpSession.ImpersonatorTenantId.HasValue) 
100  { 
101   impersonatorTenantId = this.AbpSession.ImpersonatorTenantId; 
102   value = impersonatorTenantId.Value; 
103  } 
104  else 
105  { 
106   impersonatorTenantId = this.AbpSession.TenantId; 
107   value = impersonatorTenantId.Value; 
108  } 
109  List<ZoneListDto> zonesByTenantId = await zoneAppService.GetZonesByTenantId(value, true); 
110  if (zonesByTenantId == null || zonesByTenantId != null && zonesByTenantId.Count == 0) 
111  { 
112   zonesByTenantId = new List<ZoneListDto>(); 
113  } 
114  ITenantSettingsAppService tenantSettingsAppService = this._tenantsettingsAppService; 
115  if (this.AbpSession.ImpersonatorTenantId.HasValue) 
116  { 
117   impersonatorTenantId = this.AbpSession.ImpersonatorTenantId; 
118   obj = impersonatorTenantId.Value; 
119  } 
120  else 
121  { 
122   impersonatorTenantId = this.AbpSession.TenantId; 
123   obj = impersonatorTenantId.Value; 
124  } 
125  string tenantCoordinates = await tenantSettingsAppService.GetTenantCoordinates((long)obj); 
126  ZonesMapView zonesMapView = new ZonesMapView() 
127  { 
128   Zones = zonesByTenantId, 
129   TenantCoordinates = tenantCoordinates 
130  }; 
131  return this.PartialView("_MapViewModal", zonesMapView); 
132 } 

私のテーブルレイアウトは、このようなものです:

dbo.MySiteZones 
Columns: 
Id (PK, bigint, not null) 
TenantId (int, not null) 
Name (nvarchar(255), not null) 
Caption (nvarchar(600), null) 
IsActive (bit, not null) 
IsDeleted (bit, not null) 
DeleterUserId (bigint, null) 
DeletionTime (datetime, null) 
LastModificationTime (datetime, null) 
LastModifierUserId (bigint, null) 
CreationTime (datetime, not null) 
CreatorUserId (bigint, null) 
PolygonCoordinates (nvarchar(max), null) 
HexColor (nvarchar(12), null) 
PolygonCoordinatesReversed (nvarchar(max), null) 

答えて

2

あなたはlongに直接objectをキャストすることはできません。 (:)とそれに応じて名前を変更)なぜあなたはlongとして 'OBJ' を宣言していない:

string tenantCoordinates = await tenantSettingsAppService.GetTenantCoordinates(Convert.ToInt64(obj)); 

PS:あなたも、オブジェクトの値をキャストConvert.ToInt64()を使用する必要があります

long obj; 
// ... 
string tenantCoordinates = await tenantSettingsAppService.GetTenantCoordinates(obj); 

EDITを更新間違ったライブラリコール@Jonno

+1

'Convert.ToLong()'はありません - あなたは 'Convert.ToInt64()' - https://msdn.microsoft.com/en-us/library/0c5w856c(v=vs.110)を意味するかもしれません。 aspx – Jonno

+0

あなたは正しい...今は本当に遅すぎる;)thx。 –

+0

ありがとうございました!それは完全にそれでした。私は名前に依存するいくつかの他のコードを持っていたので、(Convert.ToInt64(obj));答えでした!再度、感謝します! – zberg007

0

で述べたように限りobjintへの参照であるとして、あなたはint里に明示的なキャストを試すことができますlongにキャストする前にGHT:.GetTenantCoordinates((long)(int)obj)

は、しかし私は、あなたがintlongとしてobjを宣言することができると思います。

関連する問題