2016-10-24 6 views
0

リストの各要素に星評価コントロールが含まれているため、ユーザーはその要素のプリファレンスを設定できます。レーティングコントロールは基本的に5つのラジオボタンです。私が抱えている問題は、ユーザーが以前に行った設定を取得したときに、最後の設定のみが表示され、その前のすべての要素のラジオボタンがチェックされていないということです。リスト内の最後のラジオボタンコントロールのみがチェックされているように設定されています

enter image description here

これは、ビューのコードです:

は、これは、しかし、それはまた、第二のために最初に1つおよび3つ星を表示する必要があり、最後の要素のための4つ星を示し、どのように見えるかです:

@foreach (var item in Model.TaskEntities) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Code) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.AspNetUser.Forename) 
      @Html.DisplayFor(modelItem => item.AspNetUser.Surname) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => item.AspNetUser.Email) 
     </td> 
     <td> 
      @{ 
       var list = new TaskEntityAndPreferencesModel(item, Model.Preferences); 
      } 
      @Html.Partial("_Rating", list) 
     </td> 
     <td> 
      @*@Html.ActionLink("Edit", "Edit", new { id = item.CourseID }) | 
       @Html.ActionLink("Details", "Details", new { id = item.CourseID }) | 
       @Html.ActionLink("Delete", "Delete", new { id = item.CourseID })*@ 
     </td> 
    </tr> 
<tr> 

    <td colspan="5"> 
     @Html.DisplayFor(modelItem => item.Description) 
    </td> 
</tr> 
} 

これは、評価制御(_Rating)のコードである:

@using Microsoft.AspNet.Identity 
@model AssignerWebTool.Models.TaskEntityAndPreferencesModel 

@{ 
var checkedOne = false; 
var checkedTwo = false; 
var checkedThree = false; 
var checkedFour = false; 
var checkedFive = false; 


foreach (var preference in Model.Preferences) 
{ 
    if (preference.UserID == User.Identity.GetUserId() && preference.TaskEntityID == Model.Task.ID) 
    { 
     if (preference.Rating == 1) 
     { 
      checkedOne = true; 
     } 
     else if (preference.Rating == 2) 
     { 
      checkedTwo = true; 
     } 
     else if (preference.Rating == 3) 
     { 
      checkedThree = true; 
     } 
     else if (preference.Rating == 4) 
     { 
      checkedFour = true; 
     } 
     else if (preference.Rating == 5) 
     { 
      checkedFive = true; 
     } 
    } 
} 
} 
<div class="ratting-item" data-pid="@Model.Task.ID"> 
@{ 
    if (checkedOne) 
    { 
     <input class="rating" name="vote" type="radio" checked="checked" value="1"/> 
    } 
    else 
    { 
     <input class="rating" name="vote" type="radio" value="1" /> 
    } 
    if (checkedTwo) 
    { 
     <input class="rating" name="vote" type="radio" checked="checked" value="2" /> 
    } 
    else 
    { 
     <input class="rating" name="vote" type="radio" value="2" /> 
    } 
    if (checkedThree) 
    { 
     <input class="rating" name="vote" type="radio" checked="checked" value="3" /> 
    } 
    else 
    { 
     <input class="rating" name="vote" type="radio" value="3" /> 
    } 
    if (checkedFour) 
    { 
     <input class="rating" name="vote" type="radio" checked="checked" value="4" /> 
    } 
    else 
    { 
     <input class="rating" name="vote" type="radio" value="4" /> 
    } 
    if (checkedFive) 
    { 
     <input class="rating" name="vote" type="radio" checked="checked" value="5" /> 
    } 
    else 
    { 
     <input class="rating" name="vote" type="radio" value="5" /> 
    } 
} 

</div> 
<span class="result"></span> 

なぜこれが最後の要素でのみ機能しているのか、前の要素ではないのかわからないので、どんな助けでも大歓迎です。

編集:

モデル:

public class TaskEntityAndPreferencesModel 
{ 

    public TaskEntity Task { get; set; } 
    public IEnumerable<UserTaskEntityPreference> Preferences { get; set; } 

    public TaskEntityAndPreferencesModel(TaskEntity task, IEnumerable<UserTaskEntityPreference> preferences) 
    { 
     Task = task; 
     Preferences = preferences; 
    } 
} 


public partial class TaskEntity 
{ 
    public TaskEntity() 
    { 
     this.UserAssignedToTaskEntities = new HashSet<UserAssignedToTaskEntity>(); 
     this.UsersUserPreferences = new HashSet<UsersUserPreference>(); 
     this.UserTaskEntityPreferences = new HashSet<UserTaskEntityPreference>(); 
    } 

    public int ID { get; set; } 
    public string Name { get; set; } 
    public string Code { get; set; } 
    public string Description { get; set; } 
    public string RelatedSubjects { get; set; } 
    public int MaxNumberOfUsers { get; set; } 
    public int TaskGroupID { get; set; } 
    public string SupervisorID { get; set; } 

    public virtual Task_Group Task_Group { get; set; } 
    public virtual ICollection<UserAssignedToTaskEntity> UserAssignedToTaskEntities { get; set; } 
    public virtual ICollection<UsersUserPreference> UsersUserPreferences { get; set; } 
    public virtual ICollection<UserTaskEntityPreference> UserTaskEntityPreferences { get; set; } 
    public virtual AspNetUser AspNetUser { get; set; } 
} 


public partial class UserTaskEntityPreference 
{ 
    public string UserID { get; set; } 
    public int TaskEntityID { get; set; } 
    public int Rating { get; set; } 
    public int ID { get; set; } 

    public virtual AspNetUser AspNetUser { get; set; } 
    public virtual TaskEntity TaskEntity { get; set; } 
} 
+0

ラジオボタンの全目的は、グループの1つだけを選択できることです(ラジオボタンはすべて、「vote」という名前の1つのグループに属します)。 –

+0

いずれにしても、このコードはすべて完全には不要です。 'for'ループやカスタムの' EditorTemplate'に必要なのはすべてです。 (M => m.Preferences [i] .Vote、1)@ Html.RadioButtonFor(m => m.Preferences [私は.Vote、1)// plus other 3} 'これはすべて自動的に行われます。 –

+0

ああ私は、それは良い意味で、あなたが私に大きな助けになっていることがわかります。 – Spitfire5793

答えて

0

すべてのラジオボタンは同じname(グループ)を持っていて、一つだけのラジオボタンを選択することができますので、唯一の最後のラジオボタンが選択されている理由は、グループから。

ループの1回目の反復では、そのPreferenceのラジオボタンvalue="1"が選択されています。 2番目の反復では、value="3"のラジオボタンが選択されていますが、1つのラジオボタンしか選択できないため、checkedの属性は前のものから削除されています。プロセスは反復ごとに継続され、最後のPreferenceに一致するラジオボタンのみが選択されます。第一Preferenceのための5つのラジオボタンが(例えば)name="vote1"及び第二(言う)をname="vote2"などがありますように

は、この問題を解決するには、あなたは、各「グループ化」異なるname属性を与える必要が

しかし、あなたのモデルにバインドして最初のところでビューを正しく生成するだけで、あなたの場合は[ビューモデル] [1]を使用する必要があります(私はスクリプトを見て嫌です値を投稿するときにすべてを元のモデルに戻すために使用する必要があります)。

関連する問題