【问题标题】:How can I bind the single LINQ object to ASP.NET Repeater Control如何将单个 LINQ 对象绑定到 ASP.NET 中继器控件
【发布时间】:2014-01-16 18:14:46
【问题描述】:

下面是从数据库中获取单条记录并绑定到转发器数据源的代码sn-p。但是当页面渲染时它会抛出一个错误

protected void Page_Load(object sender, EventArgs e)
        {

            var movie= context.movies.GetMovie();

            if (!IsPostBack)
            {
                Repeater1.DataSource = movie.;
                Repeater1.DataBind();
            }

        }

错误信息:

An invalid data source is being used for Repeater1. A valid data source must implement either IListSource or IEnumerable.

有什么建议吗?

【问题讨论】:

    标签: c# linq data-binding repeater


    【解决方案1】:

    你可以像Repeater1.DataSource = new List<Movie>() { movie };一样破解它

    【讨论】:

    • 非常感谢。那是工作。使用转发器的原因是因为我想在页面上有自定义 html 标记。我发现其他数据控件在呈现时会生成表格。我想让自定义标记出现在视图源上。你有更好的建议吗?
    • @user2866746:如my answer 中所述,您可以改用FormViewDetailsView。不同之处在于DetailsView 产生(不需要的)表格布局,而FormView 让您完全控制。您创建一个模板,其中包含用于显示记录中的各个字段的控件,类似于转发器。
    • 我可能会使用 @TimSchmelter 建议的 FormView 或 DetailsView,或者实现一个自定义视图来查看详细信息。
    • 如果我使用表单视图我可以直接将单个 linq 对象绑定到它的数据源吗?
    • @user2866746:不,ASP.NET 中每个数据绑定WebControlDataSource 属性需要实现IListSourceIEnumerable,即使它只显示一条记录。这是不合逻辑的,但不是问题,因为您可以使用我们的解决方法。
    【解决方案2】:

    你可以把它做成一个数组:

    Repeater1.DataSource = new[]{ movie };
    

    但如果你总是只显示一条记录,我会改用 FormViewDetailsView

    看看:http://msdn.microsoft.com/en-us/library/ms227992(v=vs.90).aspx

    【讨论】:

      猜你喜欢
      • 2010-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-06
      • 2012-01-22
      • 2012-07-09
      相关资源
      最近更新 更多