2017-03-04 55 views
0

我是MVC的新成員,長時間在WebForms中開發,我正在遵循在線課程將現有WebForms項目更新爲MVC項目。大多數事情都沒有阻礙,但我發現我的課程中有一件事情我無法理解。在MVC中的頁面中聲明「var」

在我的課程演示執行以下操作:

CreateEdit.cshtml:

<label>Description</label> 
    @Html.TextAreaFor(x => x.Desc) 
</div> 

var list = new List<SelectListItem>() 
{ 
    new SelectListItem() { Text="Look at me", Value="1" } 
} 

<div> 
    @Html.DropDownListFor(x => x.Category, list, new { @class = "form-control" } 
</div> 

不管我做什麼的 「VAR列表...」 部分沒有在我的Visual Studio工作。 有誰知道我在做什麼錯或爲什麼這種打字方式不起作用?

------與完整頁面進行編輯包括:----------

@model CypherMVC.Models.Task 

<div class="row"> 
    <div class="col-lg-12"> 
     <h1 class="page-header"> 
      Create a New Task<br /> 
      <small>These are issues your team members should take care of - ASAP!</span></small> 
     </h1> 
    </div> 
</div> 
<div class="row"> 
    <div class="col-md-12"> 
     @using (Html.BeginForm("CreateEdit", "Task")) 
     { 
      <div class="form-group"> 
       @Html.LabelFor(x => x.Title) 
       @Html.TextBoxFor(x => x.Title, new { @class = "form-control" }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.Description) 
       @Html.TextAreaFor(x => x.Description, new { @class = "form-control", rows = 5 }) 
      </div> 

      var list = List<SelectListItem>() 
      { 
       new SelectListItem() { Text="Look at me", Value="1" } 
      } 
      <div class="form-group"> 
       @Html.LabelFor(x => x.CategoryId, "Category") 
       @Html.DropDownListFor(x => x.CategoryId, list, new { @class = "form-control" }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.DueDate, "Due Date") 
       @Html.TextBoxFor(x => x.DueDate, new { @class = "form-control" }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.AssignedToId, "Assigned To") 
       @Html.TextBoxFor(x => x.AssignedToId, new { @class = "form-control" }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.AssociatedMessageId, "Associated Message") 
       @Html.TextBoxFor(x => x.AssociatedMessageId, new { @class = "form-control" }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.Notes) 
       @Html.TextAreaFor(x => x.Notes, new { @class = "form-control", rows = 5 }) 
      </div> 
      <div class="form-group"> 
       @Html.LabelFor(x => x.Completed, "Is Complete") 
       @Html.CheckBoxFor(x => x.Completed) 
      </div> 
      <div class="form-group"> 
       <input class="btn btn-primary pull-right" type="submit" text="Submit"> 
      </div> 
     } 
    </div> 
</div> 
+0

這是一個可怕的代碼示例,以及代碼屬於控制器,而不是視圖。但它需要包裝在一個剃鬚刀代碼塊中 - 「@ {var list = new List (){...}; }' –

+0

你是什麼意思,它不工作?有沒有控制檯錯誤? –

+0

我明白這是一個可怕的例子,他只是暫時顯示DropDownList函數。問題是他沒有將它包裝在@ {}中,它仍然有效。如果我打開他的項目,我也可以不使用@ {}(在他的項目文件中)執行它,但它拒絕在我的文件中工作。 –

回答

1

所有的C#代碼裏面把它包剃鬚刀模板需要進入代碼塊(@{ ... })。這裏是official docs

你的榜樣應該是這樣的:

<label>Description</label> 
    @Html.TextAreaFor(x => x.Desc) 
</div> 

@{ 
    var list = new List<SelectListItem>() 
    { 
     new SelectListItem() { Text="Look at me", Value="1" } 
    }; 
} 

<div> 
    @Html.DropDownListFor(x => x.Category, list, new { @class = "form-control" } 
</div> 

UPDATE:由於Mr.Glaurung說,從他所遵循的過程中,情況已經沒有這個代碼塊語法來上班,我猜想代碼已經在剃鬚刀內control structure

下面的代碼示例也可以使用。由於我們在示例中看不到整個模板,因此我們無法確定。

內循環:

@{ 
    var someList = new List<string>() {"1", "2", "3"}; 
} 
@foreach (var s in someList) 
{ 
    <h1>Some HTML</h1> 

    //C# code 
    var list = new List<int>() {1, 2, 3}; 

    <h2>More HTML</h2> 
} 

還是一個if語句裏面:

@if (true) 
{ 
    <h1>Some HTML</h1> 

    //C# code 
    var list = new List<int>() { 1, 2, 3 }; 

    <h2>More HTML</h2> 
} 
+0

查看以上評論 –

+0

@ Mr.Glaurung查看更新 –

+0

我懷疑USING語句在那種情況下,可能是這樣嗎? –

1

嘗試

@{ 
    var list = new List<SelectListItem>() 
    { 
     new SelectListItem() { Text="Look at me", Value="1" } 
    }; 
} 
+0

查看我的評論以上 –

+0

可以請你分享一下_CreateEdit.cshtml_ – Geeganage