我有一个问题课:

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

现在,我通过 ObjectDataSource 提供这些的 ICollection,并使用绑定到 DataSource 的 Repeater 显示它们。我用 <%#Eval("问题")%> 显示问题,我使用文本框和 <%#Bind("回答")%> 接受答案。

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

到目前为止效果很好。

现在我想获取用户的响应并将其放回到相关的 Question 类中,然后我将保留该类。

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

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

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

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

帮助!

安东尼

有帮助吗?

解决方案

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

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
}

其他提示

绑定方法实际上不适用于转发器,它更适用于表单视图或网格视图,在其中您只编辑列表中的一项,而不是列表中的每一项。

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

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

本:尝试后, item.DataItem 始终为 null,并且根据以下帖子,它不是设计用于这种方式使用的:

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

那么我到底如何手动将其绑定回来呢?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top