2012-12-28 39 views
1

我在MVC 3相當新,但我遇到了一個相當好奇的問題。 我正在使用Razor語法,根據VS,我不需要在語句前添加@前綴爲@語句,或者在代碼內部不再需要前綴@在MVC Razor中如何使用@以及何時需要它?

所以這是我在我看來代碼:

@using (Html.BeginForm("StudentSelect", "Home", FormMethod.Post, new { id = "sSelect" })) { 

     Html.HiddenFor(m => m.SelectedStudent); 
     foreach (Classes.CStudent item in Model.Students) 
     { 
      <div class="studentSelect"> 
       <div class="studentname">@item.StudentName</div> 
       <div>@item.Address</div> 
      </div> 
     } 
    } 

就拿不就是Html.HiddenForforeach行沒有@前綴。 生成的HTML應該產生一個<form>後跟一個<input type="hidden">字段。 但是,在生成的頁面上檢查HTML時,隱藏的輸入字段丟失。

<form action="/Home/StudentSelect" id="sSelect" method="post">     
    <div class="studentSelect"> 
     <div class="studentname">Name1</div> 
     <div>AAA</div> 
    </div> 
    <div class="studentSelect"> 
     <div class="studentname">Name2</div> 
     <div>Address1</div> 
    </div> 
</form> 

我做錯了什麼?爲什麼隱藏的輸入不能被渲染? 任何線索都有幫助。謝謝

順便說一句,這段代碼編譯正確。但是,如果我在Html.HiddenFor前添加@,我的代碼不會編譯,Visual Studio會產生錯誤。

+0

你能提供編譯錯誤嗎?通常不會編譯視圖。 –

回答

2

@有兩個目的。一個觸發「代碼模式」,一個觸發Response.Write

using之前的@的實例觸發「代碼模式」。 之前item.Address@的實例相當於Response.Write(item.Address);。 您仍然需要它Html.HiddenFor,因爲這會返回需要寫入響應流的MvcHtmlString輸出。

這條線:

Html.HiddenFor(m => m.SelectedStudent); 

應該是:

@Html.HiddenFor(m => m.SelectedStudent) 

通知的;不再需要。

+0

但是,如果我確實放了一個'@'前綴,我的代碼就不會編譯。 VS產生錯誤 – Devmonster

+0

視圖通常不會被編譯。您是否使用RazorGenerator等工具創建編譯視圖? –

+0

不,我有VS在編譯時檢查代碼。我在項目文件 – Devmonster

相關問題