2013-07-18 38 views
6

Tôi có một bộ điều khiển"System.Threading.Tasks.Task`1 [System.Web.Mvc.ActionResult]" hiển thị thay vì xem

public class InvitationController : Controller 
{ 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public async Task<ActionResult> Create(InvitationModel invitationmodel) 
    { 
     if (ModelState.IsValid) 
     { 
      var regLink = _repo.SaveAndGetRegistrationLink(invitationmodel); 


      IEMailer mailer = new EMailer(); 
      var inv = mailer.Invitation(invitationmodel.Email, regLink); 

      await Task.WhenAll(new AsyncEmailSender().SendEmail(inv)); 

      return RedirectToAction("Index"); 
     } 

     return View(invitationmodel); 
    } 
} 

Nó hoạt động tốt trên localhost của tôi (chuyển hướng đến một trang mong muốn sau khi gửi email). tôi công bố trang web của tôi để smarterasp.net

Và bây giờ nó cho thấy một chuỗi thay vì chuyển hướng:

System.Threading.Tasks.Task`1[System.Web.Mvc.ActionResult] 

lý do là gì, và làm thế nào để sửa chữa nó?

Elmah không ghi nhật ký gì cả. Email thực sự đã được gửi.

Tôi đã thử thêm dll MVC. Tất cả các tập tin dưới đây ngồi bên cạnh dll trang web của tôi.

  • System.Web.Mvc
  • Microsoft.Web.Infrastructure
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Razor
  • System. Web.Helpers

chỉnh sửa

Máy chủ quản trị đã gửi cho tôi một bản ghi từ IIS:

Exception: System.NullReferenceException 

Message: Object reference not set to an instance of an object. 

StackTrace: at System.Web.ThreadContext.AssociateWithCurrentThread(Boolean setImpersonationContext) 
at System.Web.HttpApplication.OnThreadEnterPrivate(Boolean setImpersonationContext) 
at System.Web.LegacyAspNetSynchronizationContext.CallCallbackPossiblyUnderLock(SendOrPostCallback callback, Object state) 
at System.Web.LegacyAspNetSynchronizationContext.CallCallback(SendOrPostCallback callback, Object state) 
at System.Web.LegacyAspNetSynchronizationContext.Post(SendOrPostCallback callback, Object state) 
at System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.PostAction(Object state) 
at System.Threading.Tasks.AwaitTaskContinuation.RunCallback(ContextCallback callback, Object state, Task& currentTask) 
--- End of stack trace from previous location where exception was thrown --- 
at System.Threading.Tasks.AwaitTaskContinuation.<ThrowAsyncIfNecessary>b__1(Object s) 
at System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state) 
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) 
at System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem() 
at System.Threading.ThreadPoolWorkQueue.Dispatch() 
at System.Threading._ThreadPoolWaitCallback.PerformWaitCallback() 
+0

Bạn đã xuất bản 'System.Web.Mvc.dll' chưa? Có vẻ như máy chủ đang sử dụng phiên bản cũ hơn. – SLaks

+0

Tôi đã thử - điều tương tự – gisek

+0

Phiên bản .NET, ASP.NET và ASP.NET-MVC nào? –

Trả lời

2

Có lẽ họ có một số loại phiên bản beta, tôi không chắc chắn. Nhưng System.Web.LegacyAspNetSynchronizationContext trong ngăn xếp đề xuất rằng bạn cần thêm cờ UseTaskFriendlySynchronizationContext trong số Web.config của mình.

Kiểm tra như sau: http://forums.asp.net/t/1778103.aspx/1

+0

Nó không giúp được gì: ( – gisek

1

tôi đã cùng một vấn đề chính xác này, tôi thấy vấn đề là khi tôi đã nâng cấp lên .NET framework 4.5 từ 4.0, khi tôi nâng cấp MVC 3 không nâng cấp và sẽ không xử lý. NET 4.5. Tôi thấy rằng tôi phải nâng cấp lên MVC 4, tôi tìm thấy một gói trên NuGet gọi là Upgrade MVC 3 To MVC 4 của Nandip Makawana. Khi tôi sử dụng nó, nó xóa vấn đề một cách độc đáo nhưng tôi lại gặp phải một lỗi khác. Với việc nâng cấp tệp Web.config của tôi đã thay đổi và nó cần được sửa. đó là dễ dàng và giải thích trong lỗi ném.

<appSettings> 
<add key="ClientValidationEnabled" value="true" /> 
<add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
<add key="webpages:Version" value="2.0.0.0" /> <---------- This line 
<add key="PreserveLoginUrl" value="true" /> 

phiên bản trang web thay đổi để 2 và cần phải thay đổi lại 1

<add key="webpages:Version" value="1.0.0.0" /> 

Sau đó thay đổi ứng dụng của tôi đã làm việc khá độc đáo. Tôi hy vọng điều này sẽ giúp một ai đó, nó đã cho tôi 3 ngày tìm kiếm một câu trả lời bản thân mình.

Các vấn đề liên quan