2017-10-06 64 views
0

我現在問自己,如果我在剃刀視圖中使用了太多的邏輯。在Asp.Net Mvc的剃鬚刀視圖中有多少邏輯是合理的?

我學會了分離邏輯和標記,但剃刀給了我們很好的工作機會。我非常喜歡有機會在下面的例子中給出「動態」的css類。

我確定我所做的並不是最佳實踐,但它會如何正確完成?

@using AtheleteManager.Helpers 
@using AtheleteManager.Models 
@using Microsoft.Ajax.Utilities 
@model AtheleteManager.Models.Athlete 

<div class="container col-lg-9 col-md-9 hidden-sm hidden-xs panel panel-primary topten padding-leftright-thirty"> 
    <div class="panel-heading negative-margin-leftright-thirty"> 
     <h1 id="">Timeline</h1> 
    </div> 
    <div id="timeline"> 
     <div class="row timeline-movement timeline-movement-top"> 
     <div class="timeline-badge timeline-future-movement"> 
      <a href="#"> 
       <span class="glyphicon glyphicon-plus"></span> 
      </a> 
     </div> 
     </div> 
     <div class="row timeline-movement"> 

     @foreach (var trainingPost in Model.TrainingPosts) 
     { 
      string className; 
      string offSet; 
      string debitsOrCredits; 
      var dateHelper = new DateHelper(); 
      <div class="timeline-badge"> 
       <span class="timeline-balloon-date-day">@trainingPost.Date.Day</span><br /> 
       <span class="timeline-balloon-date-month">@dateHelper.ToShortMonthName(trainingPost.Date)</span> 
      </div> 
      if (trainingPost.Id % 2 != 0) 
      { 
       className = "col-sm-6 timeline-item"; 
       offSet = "col-sm-11"; 
       debitsOrCredits = "credits"; 
      } 
      else 
      { 
       className = "col-sm-offset-6 col-sm-6 timeline-item"; 
       offSet = "col-sm-offset-1 col-sm-11"; 
       debitsOrCredits = "debits"; 
      } 
      foreach (var executedWorkouts in trainingPost.ExecutedWorkouts) 
      { 
       <div class="@className"> 
        <div class="row"> 
        <div class="@offSet"> 
         <div class="timeline-panel @debitsOrCredits"> 
          <ul class="timeline-panel-ul"> 
           <li> 
           <p> 
            <small class="text-muted"><i class="glyphicon glyphicon-time"></i> @trainingPost.Date.ToShortDateString()</small> 
           </p> 
           </li> 
           <li><span class="importo">Workout</span></li> 
           <li> 
           <h3>@executedWorkouts.Workout.Name</h3> 
           </li> 
           <li><span class="causale">  <b>@executedWorkouts.Workout.Rounds</b></span> </li> 
          </ul> 
         </div> 
        </div> 
        </div> 
       </div> 
      } 
     } 
     </div> 
    </div> 
</div> 

回答

0

至於邏輯你把你的標記是視圖相關的你是不錯的。

就我個人而言,我不喜歡我的視圖中的C#代碼塊,因此我會用條件運算符替換if語句。

事情是這樣的:

<div class="@(trainingPost.Id % 2 != 0 ? "col-sm-11" : "col-sm-offset-1 col-sm-11")"> 

這將有助於讓你查看更簡潔,更具可讀性。

最後想想盡可能多的IT相關的問題,我認爲沒有一個正確的答案,但只是不同的方法。

0

這是你所做的最好的方式。 另外,爲了儘可能地使用剃鬚刀的優點,我也做了同樣的事情。

僅在更新模型時更新視圖。

可以提高,隨着BundelConfig

0

個人不喜歡把太多的業務邏輯裏面查看使css文件。

主要原因是與單元測試視圖相比,不太容易。您必須使用剃刀發生器或執行器集成測試。無論哪種方式都需要很多初始設置,並且它們容易破裂。

因此,我將把它們作爲TrainingPost類中的屬性,並在Controller中設置這些值。然後當你編寫單元測試時,你可以斷言這些值。

public class TrainingPost 
{ 
    ... 
    public string ClassName { get; set; } 
    public string OffSet { get; set; } 
    public string DebitsOrCredits { get; set; } 
}