2016-02-09 17 views
0

我正在嘗試學習Razor/ASP.NET。我有一些示例代碼,我試圖運行。我似乎無法弄清楚要添加什麼引用。我應該在這個基於Razor的ASP.NET示例中添加什麼參考

我得到的錯誤上:IsPost下面

@{ 
ViewData["Title"] = "Home Page"; 
@using Newtonsoft.Json; 
@using System.Net; 
@using System.IO; 

List<string> files = new List<string>(); 

if (IsPost) 
{ 
    string GetURL = "http://demo.azurewebsites.net/api/File"; 
    WebClient client = new WebClient(); 
    Stream dataStream = client.OpenRead(GetURL); 
    StreamReader reader = new StreamReader(dataStream); 
    var results = JsonConvert.DeserializeObject<dynamic>(reader.ReadLine()); 
    reader.Close(); 

    foreach (var item in results) 
    { 
     files.Add((string)item.filename); 
    } 
} 

}

+1

你使用Visual Studio?如果你將鼠標懸停在這些上面,它會提示要導入的命名空間。這不會添加引用,只是將範圍內的名稱。如果你需要找出裝配的東西,通常在網上搜索「c#」將會得到你的MSDN頁面,描述它是什麼裝配。 – mason

+0

是的,我在視覺工作室。我同意。我之前使用過C#,但由於某些原因,這不適用於.cshtml文件。我按照你的建議做了搜索,找到了一些程序集。我仍然無法找到能夠使用IsPost的內容。 – Adoyt

+0

您不應該在Razor中擁有該代碼。該視圖不是向第三方API發出請求的正確位置。這應該發生在某種抽象層中,由您的Controller調用。結果信息應放置在傳遞給視圖的模型中。 – mason

回答

0

很可能是因爲您在視圖中鍵入此沒有@{...}包圍它。在你看來,你應該把它放在@{...}之內,告訴Razor代碼塊是C#(或VB,以你的項目爲準)。

話雖如此,在視圖中插入代碼太多不理想。視圖只應負責呈現數據,而不是提取數據。

UPDATE

你的問題很可能在SO項目的重複: Razor-based view doesn't see referenced assemblies 見@qes和@五.B答案。

+0

是的,我已經用完整的代碼更新了這篇文章。我無法讓IsPost工作。如果發現它是頁面的屬性。在這個例子中使用它:http://www.asp.net/web-pages/overview/getting-started/introducing-razor-syntax-c – Adoyt

0

那麼,根據你在預先回答您的評論中提供的鏈接上,你使用ASP.Net WebPages - 這是獲得一個ASP.Net的網站上使用剃刀語法的偉大輕量級方式。這不是然而MVC這麼一件事,你不會有事情像ViewData,但沒關係 - 你可以使用PagePageData

這將是怎樣的整個頁面會是什麼樣子(雖然通常你會使用_layout文件結合「內容文件」):

@using Newtonsoft.Json; 
@using System.Net; 
@using System.IO; 

@{ 
    /* 
    Page or PageData instead of ViewBag/ViewData 
    */  
    Page.Title = "Hello World"; //this is typically used with a _layout.cshtml where the<title> Tag would be 

    //You can create/name Page properties/data as needed 
    Page.Whatever = "whatever I want"; 
    Page.H1TagForSeo = "this is the h1 tag"; 
    Page.SomeInteger = 100; 
    Page["MyPageData"] = DateTime.UtcNow; 


    List<string> files = new List<string>(); 

    if (IsPost) 
    { 
     //IsPost test - this will only run if this page is requested via POST 
     for (int i = 0; i < 10; i++) 
     { 
      files.Add(i.ToString()); 
     } 
    } 
} 
<!DOCTYPE html> 
<html> 

<head> 
    <title>@Page.Title</title> 
</head> 
<body> 
    <h1>@Page.H1TagForSeo</h1> 
    <p>The time is @Page["MyPageData"]</p> 
    <p> 
     You can use <code>@@Page propertes/data similar to ViewBag/ViewData</code> @Page.Whatever was viewed @Page.SomeInteger times 
    </p> 

    @if (IsPost) 
    { 
     <div>Post Test</div> 
     <p>This entire section will only be displayed when requested via POST</p> 
     <p>@string.Join(",", files)</p> 
    } 
</body> 
</html> 

H個...

+0

謝謝澄清EdSF。我仍然無法讓IsPost工作。看起來我必須在VS中創建錯誤的項目類型。 – Adoyt

+0

@Adoyt也許。 'WebPages'由'Add New Web Site'創建(然後選擇ASP.net Razor vX)。雖然我不會提供建議,但也可以讓「網頁」在「MVC應用程序」中工作,以及某些「道路規則」 - 例如避免(實際上,_不要使用具有相同/現有'View'名稱的Razor頁面 - 比如「index」或「about」(這是常見的腳手架MVC視圖)。 – EdSF

+0

@Adoyt是否至少_building_和/或VS不抱怨錯誤(沒有紅色squigglies)。也試過了,你的代碼是這樣的,那個天藍色的演示網站是'403' - 這就是爲什麼我將它改爲一個簡單的樣本。當你說「doens't work」 - 你的意思是在你調試時沒有命中/評估嗎? – EdSF

相關問題