2016-10-24 45 views
0

我有一個列表,列表中的每個元素都包含一個星級評級控件,允許用戶爲該元素設置其偏好。評級控制基本上只有5個單選按鈕。我遇到的問題是,當我檢索用戶先前所做的首選項時,只顯示最後一個首選項,在此之前所有元素的單選按鈕都未選中。列表中只有最後一個單選按鈕控件被設置爲選中

這是它的外觀,呈現出4星級的最後一個元素,但它也應該表現出一個第一和三顆星第二:

enter image description here

這是視圖代碼:

@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

單選按鈕的全部用途是您只能爲組選擇一個(並且所有單選按鈕都屬於一個名爲'vote'的組)。 –

+0

在任何情況下,所有這些代碼是完全不必要的。您只需要一個'for'循環或自定義'EditorTemplate' - 例如對於(int i = 0; i m.Preferences [i] .Vote,1)@ Html.RadioButtonFor(m => m.Preferences [我] .Vote,1)//加上其他3}'這一切都將自動完成 –

+0

啊我明白了,這很有道理,你對我有很大的幫助。 – Spitfire5793

回答

0

之所以僅選擇最後一個單選按鈕,是因爲你的所有單選按鈕具有相同的name(組),你只能選擇一個單選按鈕從一組。

在循環的第一次迭代中,爲Preference選擇了單選按鈕value="1"。在第二次迭代中,選中了具有value="3"的單選按鈕,但由於只能選擇一個單選按鈕,因此將從前一箇中刪除checked屬性。該過程繼續進行每次迭代,只有與最後一個Preference匹配的單選按鈕被選中。

爲了解決這個問題,你需要給每個「分組」不同name屬性,以便於爲第1 Preference 5個單選按鈕會(說)name="vote1"和第二(說)name="vote2"

然而,如果你只是通過綁定到你的模型來正確地生成視圖,並且在你的情況下你應該使用[view model] [1](我不希望看到你的腳本在發佈值時,必須使用它將它們全部轉換回您的模型)。

相關問題