2

我有一个问题类:

class Question {
    public int QuestionNumber { get; set; }
    public string Question { get; set; }
    public string Answer { get; set; }
}

现在,我通过 ObjectDataSource 使这些 ICollection 可用,并使用绑定到 DataSource 的 Repeater 显示它们。我使用<%#Eval("Question")%>来显示问题,并使用 TextBox 和<%#Bind("Answer")%>来接受答案。

如果我的 ObjectDataSource 返回三个 Question 对象,那么我的 Repeater 会显示三个问题,每个问题后面都有一个 TextBox 供用户提供答案。

到目前为止效果很好。

现在我想获取用户的响应并将其放回相关的问题类中,然后我会坚持下去。

当然,框架应该为我处理所有这些?我已经使用了 Bind 方法,我已经指定了一个 DataSourceID,我已经在我的 ObjectDataSource 类中指定了一个 Update 方法,但似乎没有办法真正启动整个事情。

我尝试在调用 MyDataSource.Update() 后面的代码中添加一个命令按钮,但它尝试在没有参数的情况下调用我的 Update 方法,而不是它期望的 Question 参数。

肯定有一种简单的方法可以在很少或没有代码隐藏的情况下实现所有这些吗?

似乎所有的碎片都在那里,但是缺少一些胶水将它们粘在一起。

帮助!

安东尼

4

4 回答 4

1

您必须处理回发事件(按钮单击或其他),然后枚举转发器项目,如下所示:

foreach(RepeaterItem item in rptQuestions.Items)
{
   //pull out question
   var question = (Question)item.DataItem;
   question.Answer = ((TextBox)item.FindControl("txtAnswer")).Text;

   question.Save() ?  <--- not sure what you want to do with it
}
于 2008-09-09T18:16:42.237 回答
1

bind 方法实际上并不适用于转发器,它更适用于 formview 或 gridview,您只编辑列表中的一个项目,而不是列表中的每个项目。

在两者上,您都单击一个编辑按钮,然后为您提供绑定控件(使用绑定绑定),然后点击保存链接,该链接自动将项目保存回您的数据源,而无需任何代码。

于 2008-09-09T19:41:59.740 回答
0

那么如果我必须在回发时手动绑定所有内容,那么 Bind 方法(而不是 Eval 方法)有什么意义呢?

于 2008-09-09T19:06:37.937 回答
0

Ben:尝试过之后,item.DataItem 总是为空,根据下面的帖子,它不是为这样使用而设计的:

http://www.netnewsgroups.net/group/microsoft.public.dotnet.framework.aspnet/topic4049.aspx

那么我到底该如何手动绑定它呢?

于 2008-09-10T09:53:46.837 回答