2017-03-03 46 views
-2

像下面定義的模型(無屬性,但只有一個方法):無法在視圖中顯示的結果

namespace PartyInvitesInProASPNETMVC5.Models 
{ 
    public class MyAsyncMethods 
    { 
     public static Task<long?> GetPageLength() 
     { 
      HttpClient client = new HttpClient(); 
      var httpTask = client.GetAsync("http://www.google.com"); 
      return httpTask.ContinueWith((Task<HttpResponseMessage> antecedent) => { 
       return antecedent.Result.Content.Headers.ContentLength; 
      }); 
     } 
    } 
} 

書面控制器的操作方法如下圖所示:

public ActionResult GooglePageLength() 
{ 
    var content = MyAsyncMethods.GetPageLength(); 
    return View(content); 
} 

我並不瞭解如何爲上述操作方法生成視圖。從默認生成的視圖中修改下面的代碼。但是,仍然會出現錯誤。

@model PartyInvitesInProASPNETMVC5.Models.MyAsyncMethods.GetPageLength() 
@{ 
    Layout = null; 
} 
<!DOCTYPE html> 
<html> 
<head> 
    <meta name="viewport" content="width=device-width" /> 
    <title>Google Page Length</title> 
</head> 
<body> 
    <div>@Convert.ToInt32(@Model)@*How to write code here?*@ 
    </div> 
</body> 
</html> 

下面是我得到的錯誤:

傳遞到字典的模型項的類型爲「System.Threading.Tasks.ContinuationResultTaskFromResultTask 2[System.Net.Http.HttpResponseMessage,System.Nullable 1 [System.Int64]」,但這個字典需要一個'System.Nullable`1 [System.Int32]'類型的模型項。

+0

您傳遞了一個longof型的模型,因此它必須是@model long?'。您所顯示的代碼無法生成該錯誤 - 但會生成_Compilation Error_,因爲「@ model」聲明不能是一種方法。你需要顯示你的真實代碼。 –

+0

@Stephen:對不起,遲到回覆。相信我,它是真實的代碼。 –

+0

不是因爲如果你真的在模型聲明中有一個方法會引發不同的異常。 –

回答

-1

感謝上帝,我解決了我的疑問。

可惜的是,我已經獲得了一個反對票,甚至不知道的原因。

無論如何,解決方案非常簡單明瞭。

修改了下面的操作方法。

public ActionResult WellsFargoPageLength() 
{ 
ViewBag.PageLength = MyAsyncMethods.GetPageLength().Result; 
return View(); 
} 

刪除了視圖,並再次創建了上面修改的操作方法。

1

你應該等待結果與控制器等待:

public async Task<ActionResult> GooglePageLength() 
{ 
    long? content = await MyAsyncMethods.GetPageLength(); 
    return View(content); 
} 

然後讓你的視圖模型類型long?

@model long? 

您正在通過異步完成對查看任務。而且你還將模型類型設置爲返回任務的函數(不知道你甚至可以這樣做)。

通常你應該等待異步地等待任務的結果,然後返回結果作爲模型視圖。

+0

無論我寫的代碼是「不用等待」的另一種方式。無論如何,你的建議並沒有解決我的問題。感謝你的付出。 –

+0

_did不知道你甚至可以做到這一點 - - 你的不能:) - OP沒有向我們顯示正確的代碼。 –