2014-12-07 83 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