2016-11-04 3 views
1

私は評価と呼ばれるクラスがあり、5つの異なる評価(1 =不良.. 5 =優秀)があります。また、10の質問があり、それぞれが評価クラスを使用するモデル(レビュー)もあります。今ビューでは、コードが多少ペーストされているので、Reviewクラスのこれらの各プロパティに対してforEachがあります。コードを複製し、それらのプロパティを変更するのではなく、これがすべて可能ならば、レザーの構文を生成するRatingsクラスのメソッドを作成するだけです。C#クラスでカミソリの構文を生成して表示に送信

現在の状況と私がしたいことについてのサンプルは以下のとおりです。

現在のビュー(のみ2つのプロパティ表示:私はそれを見たい方法

<tr> 
    <td class="control-label col-md-4"> 
     @Html.LabelFor(model => model.ReviewModel.SpeakerReview, htmlAttributes: new { @class = "control-label " }) 
    </td> 
    @foreach (var rating in ratingModel.RatingList) 
    { 
     <td class="col-md-1"> 
      @Html.RadioButtonFor(model => model.ReviewModel.SpeakerReview, rating.RatingId) 
     </td> 
    } 
</tr> 
<tr> 
    <td class="control-label col-md-4"> 
     @Html.LabelFor(model => model.ReviewModel.AvHandoutsApplicable, htmlAttributes: new { @class = "control-label " }) 
    </td> 
    @foreach (var rating in ratingModel.RatingList) 
    { 
     <td class="col-md-1"> 
      @Html.RadioButtonFor(model => model.ReviewModel.AvHandoutsApplicable, rating.RatingId) 
     </td> 
    } 
</tr> 

ビュー:

<tr> 
    <td class="control-label col-md-4"> 
     @Html.LabelFor(model => model.ReviewModel.SpeakerReview, htmlAttributes: new { @class = "control-label " }) 
    </td> 
    @ReviewModel.BuildRatingList(ratingModel, ReviewModel.SpeakerReview); 
</tr> 
<tr> 
    <td class="control-label col-md-4"> 
     @Html.LabelFor(model => model.ReviewModel.AvHandoutsApplicable, htmlAttributes: new { @class = "control-label " }) 
    </td> 
    @ReviewModel.BuildRatingList(ratingModel, ReviewModel.AvHandoutsApplicable); 
</tr> 

をクラス:

public static string BuildRatingList(Rating ratingModel, object reviewItem) 
{ 
    string RtnVal = ""; 
    foreach (var rating in ratingModel.RatingList) 
    { 
     RtnVal = "<td class='col-md-1'>@Html.RadioButtonFor(model => " + reviewItem + ", rating.RatingId)</td>"; 
    } 
    return RtnVal; 
} 

感謝事前に!

+1

あなたはパーシャルビューを使用しようとしましたか? https://docs.asp.net/en/latest/mvc/views/partial.html – vittore

+0

オブジェクトをパーシャルビューに渡したり読み取ったりして、苦労しました。たとえば、 "model.ReviewModel.SpeakerReview"を渡して読み込む方法、 – DanO

+0

単純なケースでは、それはちょうど '@Html.Partial(" SpeakerReviewPartial "、Model.ReviewModel.SpeakerReview)' – vittore

答えて

1

RazorEngineモジュールをNUGETからプラグインすることでほぼ正確に行うことができますが、普通のpartial viewsまたはView Componentsを使用する方がよいと思います。コンポーネント:

namespace ViewComponentSample.ViewComponents 
{ 
    public class PriorityList : ViewComponent 
    { 
     private readonly ToDoContext db; 

     public PriorityList(ToDoContext context) 
     { 
      db = context; 
     } 

     public async Task<IViewComponentResult> InvokeAsync(
     int maxPriority, bool isDone) 
     { 
      var items = await GetItemsAsync(maxPriority, isDone); 
      return View(items); 
     } 
     private Task<List<TodoItem>> GetItemsAsync(int maxPriority, bool isDone) 
     { 
      return db.ToDo 
        .Where(x => x.IsDone == isDone && x.Priority <= maxPriority) 
        .ToListAsync(); 
     } 
    } 
} 

とビュー:

@using ViewComponentSample.Models 
@using ViewComponentSample.ViewComponents 
@model IEnumerable<TodoItem> 

<h2>ToDo nameof</h2> 

<div> 
    @await Component.InvokeAsync(nameof(PriorityList), 
         new { maxPriority = 4, isDone = true }) 
</div> 
+0

Vittoreに感謝します。 – DanO

関連する問題