2013-09-27 110 views
2

所以我有以下的ASP.NET代码。本质上,我试图展示一个“考试”对象。考试由几个字符串组成,然后是问题的嵌套集合。问题有一个嵌套的答案集合。当我运行它时,我收到一个错误消息: 无法投射'System.Char'类型的对象以键入'PracticeNet.DataEntities.Question'。ASP.NET嵌套的ListView数据绑定

System.InvalidCastException:无法将类型为 'System.Char'的对象强制类型为'PracticeNet.DataEntities.Question'。

线15:<%#:Item.QuestionTitle%>

我不知道为什么我收到这个错误。我在Question类的任何地方都没有任何字符类型。我唯一的猜测是,我有点从根本上误解了嵌套的ListView对象模型。任何人都可以对此有所了解吗?完整代码如下。

<asp:Content ID="Content2" ContentPlaceHolderID="FeaturedContent" runat="server"> 
    <asp:FormView ID="examDetails" runat="server" ItemType="PracticeNet.DataEntities.Exam" SelectMethod="GetExam" RenderOuterTable="false"> 
     <ItemTemplate> 
      <div> 
       <h1><%#:Item.ExamTitle %></h1> 
       <h2><%#:Item.Description %></h2> 
      </div> 
      <br /> 
      <asp:ListView ID="examQuestions" runat="server" ItemType="PracticeNet.DataEntities.Question" DataSource="<%#:Item.Questions %>"> 
       <ItemTemplate> 
        <div> 
         <h1><%#:Item.QuestionTitle %></h1> 
         <h2><%#:Item.QuestionText %></h2> 
        </div> 
        <br /> 
        <asp:ListView ID="questionAnswers" runat="server" ItemType="PracticeNet.DataEntities.Answer" DataSource="<%#:Item.AnswerOptions %>"> 
         <ItemTemplate> 
          <div> 
           <h1><%#:Item.AnswerText %></h1> 
          </div> 
         </ItemTemplate> 
        </asp:ListView> 
       </ItemTemplate> 
      </asp:ListView> 
     </ItemTemplate> 
    </asp:FormView> 
</asp:Content> 
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server"> 
</asp:Content> 

考试类别:

public class Exam 
    { 
     [Required] 
     public Guid ExamId 
     { 
      get; 
      set; 
     } 
     [Required, StringLength(512),Display(Name="Title")] 
     public string ExamTitle 
     { 
      get; 
      set; 
     } 
     [Required, StringLength(1024),Display(Name="Details")] 
     public string Description 
     { 
      get; 
      set; 
     } 

     [Required] 
     public virtual ICollection<Question> Questions 
     { 
      get; 
      set; 
     } 
    } 

问题类别:

public class Question 
    { 
     public Question() 
     { 
      QuestionId = Guid.NewGuid(); 
      AnswerOptions = new List<Answer>(); 
     } 
     [Key] 
     public Guid QuestionId 
     { 
      get; 
      set; 
     } 
     [Required, StringLength(120), Display(Name="Title")] 
     public string QuestionTitle 
     { 
      get; 
      set; 
     } 
     [Required,StringLength(255), Display(Name="Text")] 
     public string QuestionText 
     { 
      get; 
      set; 
     } 
     [Required] 
     public virtual ICollection<Answer> AnswerOptions 
     { 
      get; 
      set; 
     } 
    } 

最后,答案类:

public class Answer 
    { 
     public Answer() 
     { 
      AnswerId = Guid.NewGuid(); 
     } 
     [Key] 
     public Guid AnswerId 
     { 
      get; 
      set; 
     } 
     [Required, StringLength(250), Display(Name="Answer")] 
     public string AnswerText 
     { 
      get; 
      set; 
     } 

    } 
+1

我相信你正在使用“DataSource”字段的错误ASP标记。它应该是'<%#Item.AnswerOptions%>'你有':'在那里是不必要的。 – debracey

+1

你试过用'<%#'替换'<%#:'看起来有嫌疑吗? – James

+1

是的,用<%#替换<%#:似乎已经做到了。谢谢! – GWLlosa

回答

2

(因为每一个问题,需要在答案一种形式答案)

正如已经被@詹姆斯的意见表示,并@debracey服务器标签被错误地配制:

更换

<%#: Item.AnswerOptions %> 

随着

<%# Item.AnswerOptions %>