2014-06-16 18 views
1

聲明:我是Razor的新手。我似乎無法弄清楚以下幾點:MVC 4 Razor:在@Section元素中使用@Html會導致編譯錯誤

當我使用@Html元素中@section,我得到以下編譯錯誤

表達式樹不能包含一個動態操作。

這裏是我的代碼:

@section login{ 
@using (Html.BeginForm(new {ReturnUrl = ViewBag.ReturnUrl})) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

        @Html.LabelFor(m => m.UserName) 
        @Html.TextBoxFor(m => m.UserName) 
        @Html.ValidationMessageFor(m => m.UserName) 
     @*<fieldset> 
      <legend>Log in Form</legend> 

        @Html.LabelFor(m => m.UserName) 
        @Html.TextBoxFor(m => m.UserName) 
        @Html.ValidationMessageFor(m => m.UserName) 

       <li> 
        @Html.LabelFor(m => m.Password) 
        @Html.PasswordFor(m => m.Password) 
        @Html.ValidationMessageFor(m => m.Password) 
       </li> 
       <li> 
        @Html.CheckBoxFor(m => m.RememberMe) 
        @Html.LabelFor(m => m.RememberMe, new {@class = "checkbox"}) 
       </li> 

      <input type="submit" value="Log in" /> 
     </fieldset>*@ 
    } 
} 

正如你所看到的,我試圖把html標籤內的這些元素,但我已經評論過很多它來解決。任何意見,爲什麼我得到這個錯誤,以及如何解決它將不勝感激。

謝謝!

+1

你有一個'模型'聲明丟失 – Andrei

+0

這是強烈類型的視圖? (即有一個'@ model'指令)。你不能在動態模型中使用基於表達式的方法(即你沒有明確的模型聲明就得到了什麼)。 –

回答

2

將您的模型類(完全命名空間)作爲@model指令添加到視圖頂部。

例如

@model myapplication.mynamespace.LoginModel 

和你LoginModel樣子:

public class LoginModel 
    { 
     public string UserName {get; set;} 
     public string Password {get; set;} 
     public bool RememberMe {get; set;} 
    } 

TextBoxForCheckboxFor等使用表達式樹和反射來獲取的實際價值。如果沒有真正的模型,它就不知道要預期什麼類型的值,因此不能在編譯時間處建立表達式樹

+0

好的。這就說得通了。我試圖做的是從登錄cshtml文件中獲取代碼,該文件的@model屬性設置爲登錄模型。問題是,我想使用Index(主頁)上的Login視圖/控制器中的邏輯。有關如何從索引視圖使用當前運行視圖的建議? – Killingsworth

+0

您的索引視圖中是否有模型?如果不是簡單地添加一個,並確保控制器中的「index」操作方法創建一個「新的LoginModel」,並將其作爲ViewModel傳遞給它。 '返回查看(新的LoginModel());'或類似的 –

+1

'登錄'邏輯真的屬於一個局部視圖,所以你可以渲染它在你喜歡的地方。如果您使用@ Html.Action(「Login」,「account」)渲染它,它將使用帳戶控制器。 –

相關問題