2014-12-07 58 views
0

我的問題是在哪裏放置返回的表格數據的邏輯。把表格數據的邏輯放在哪裏

我正在玩一個顯示課程和學生入學的教程。

這裏是從屏幕

評分標題名字

2.00經濟學蒂貝茨編輯數據|詳細信息|刪除

3.50 Economics Guzman編輯|詳細信息|刪除

4.00 Literature Catlett編輯|詳細信息|刪除

1.80 Literature Tibbetts編輯|詳細信息|刪除

3.20 Chemistry Tibbetts編輯|詳細信息|刪除

4.00 Chemistry Guzman編輯|詳細信息|刪除

4.00 Literature Pete Edit |詳細信息|刪除

代碼開始時只是顯示錶數據

@foreach (var item in Model.Enrollments) 
{ 
    <tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.Course.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Grade) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Course.Credits) 
    </td> 
    </tr> 
} 

我能夠改變TR紅色背景,如果等級是< = 2通過添加瓦爾風格 和風格=「@風格」(在堆棧溢出發現這個)

@foreach (var item in Model.Enrollments) 
{ 
    var style = item.Grade <= 2 ? "background-color:Red" : null; 
    <tr style="@style"> 
    <td> 
     @Html.DisplayFor(modelItem => item.Course.Title) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Grade) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.Course.Credits) 
    </td> 
    </tr> 
} 

這是正確的,因爲它是在視圖上,我會怎麼做更難的事像上的刪除動作經濟的標題s或不顯示用戶lastname如果它以「T」開頭 這是全部應該在PartialView或控制器或兩者兼而有之以及如何做到這一點。 一個例子會很棒。我想我只是不明白如何在數據進入視圖之前對其進行按摩。

我是一個經典的asp實施者轉移到MVC。我意識到應該有一個單獨的代碼,以便它不像經典的意大利麪條,但我是一個新手,並且對如何這樣做感到困惑。 在過去,我會做一個if語句並執行邏輯,然後根據它執行asp和or html。

+0

使用其他屬性創建視圖模型以表示要顯示的內容。例如,'EnrollmentsViewModel'可以包含一個屬性'bool CanDelete',用於有條件地渲染元素。在將其傳遞給視圖之前,先在控制器中設置這些屬性。 – 2014-12-07 01:10:41

+0

感謝您的快速回復。所以我會有一個名爲viewModels的新文件夾,然後我會在裏面有一個具有邏輯的方法的類。我想知道你是否有一個例子或我可以看的東西。我從來沒有製作過視圖模型或其他任何東西。 – dnice 2014-12-07 01:14:08

+0

擁有一個單獨的文件夾'ViewModels'可以讓管理更容易。只需將'Enrollment'的屬性剪切並粘貼到'EnrollmentVM'中,並根據需要添加新屬性。建議您閱讀[MVC中的視圖模型是什麼](http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) – 2014-12-07 01:18:03

回答

0

儘管沒有硬性和快速規則,但使用視圖模型來表示要顯示的內容將節省使用複雜代碼污染視圖並將您的邏輯保存在控制器中。你可以做一個例子(你還沒有發佈你的模型和你貼的觀點不符合表格的佈局,所以我只是猜測)

查看模型

public class CourseVM 
{ 
    public string Name { get; set; } 
    public IEnumerable<EnrollmentVM> Enrollments { get; set; } 
} 

public class EnrollmentVM 
{ 
    public int ID { get; set; } 
    public string Title { get; set; } 
    [DisplayFormat(DataFormatString="{0:0.00}")] 
    public decimal Grade { get; set } 
    public string LastName { get; set; } 
    public bool CanDelete { get; set; } 
    public string ClassName { get; set; } 
} 

控制器

public ActionResult Index(int ID) 
{ 
    var course = // get the course based on the ID 
    CourseVM model = new CourseVM(); 
    { 
    Name = course.Name, 
    Enrollments = course.Enrollments.Select(e => new EnrollmentVM() 
    { 
     ID = e.ID, 
     Title = e.Title, 
     Grade = e.Grade, 
     LastName = e.LastName, 
     CanDelete = e.Title != "Economics", 
     ClassName = e.Grade < 2.0 ? "fail" : "pass" 
    }) 
    }; 
    return View(model); 
} 

查看

@model CourseVM 
<h2>@Html.DisplayFor(m => m.Name)</h2> 
<table> 
    <thead> 
    ... 
    </thead> 
    <tbody> 
    @foreach(var enrollment in Model.Enrollments) 
    { 
     <tr class="@enrollment.ClassName"> 
     <td>@Html.DisplayFor(m => enrollment.Grade)</td> 
     .... 
     <td>@Html.ActionLink("Edit", "Edit", "Enrollment", new { ID = enrollment.ID }, null)</td> 
     <td> 
      if(enrollment.CanDelete) 
      { 
      @using(Html.BeginForm("Delete", "Enrollment", new { ID = enrollment.ID }) 
      { 
       <input type="submit" class="deletelink" value="Delete" /> 
      } 
      } 
     </td> 
     </tr> 
    } 
    </tbody> 
</table> 

CSS

.fail { 
    background-color:red; 
} 
.pass { 
    background-color:green; 
} 
.deletelink { 
    // style to look like a hyperlink if required 
} 
+0

謝謝斯蒂芬。我認爲這是我需要的。我有很長的路要走,學習曲線,但這將是偉大的玩,並通過 – dnice 2014-12-07 06:30:56

+0

- 更新我得到了這項工作。 -再次感謝 – dnice 2015-01-06 20:47:32