2017-04-05 50 views
1

enter image description here获得值从<%# %>

<cms:CMSRepeater ID="rptTopic" runat="server" SelectOnlyPublished="true" OrderBy="NodeLevel,NodeOrder" ClassNames='<%# CLASS_NAME %>' Path='<%# Path %>'> 

enter image description here

CLASS_NAMEPath值在后端预定义。但我仍然遇到错误。

我的代码有问题吗?

以下是代码的全部内容。

<cms:CMSRepeater ID="CMSRepeater1" runat="server" SelectOnlyPublished="true" OrderBy="NodeLevel,NodeOrder" ClassNames='<%# CLASS_NAME %>' Path='<%# Path %>'> 
     <ItemTemplate> 
      <div class="col-md-3"> 
       <div class="panel panel-default"> 
        <asp:Image ID="imgTopic" runat="server" Height="200px" Width="100%" ImageUrl='<%# Eval("BackgroundImage") %>' /> 
        <h4><%# Eval("Title") %></h4> 
        <p><%# Eval("Descriptions") %></p> 
        <a class="btn" href='<%# Eval("UrlLink") %>'> 
         <%# Eval("UrlText") %> 
        </a> 
       </div> 
      </div> 
     </ItemTemplate> 
    </cms:CMSRepeater> 

这是我得到的异常:

Message: DataBinding: 'System.Data.DataRowView' does not contain a property with the name 'BackgroundImage'. 

Exception type: System.Web.HttpException 
Stack trace: 
at System.Web.UI.DataBinder.GetPropertyValue(Object container, String propName) 
at System.Web.UI.DataBinder.Eval(Object container, String[] expressionParts) 
at System.Web.UI.DataBinder.Eval(Object container, String expression) 
at System.Web.UI.TemplateControl.Eval(String expression) 
at CMS.Base.Web.UI.AbstractUserControl.Eval(String column) 
at ASP.inteksoft_webparts_content_topiclisting_ascx.__DataBinding__control3(Object sender, EventArgs e) in C:\Users\yjseow\Desktop\inteksoft svn\trunk\MOT\MOT.Website\Website\CMS\Inteksoft\WebParts\Content\TopicListing.ascx:line 9 
at System.Web.UI.Control.OnDataBinding(EventArgs e) 
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) 
at System.Web.UI.Control.DataBind() 
at System.Web.UI.Control.DataBindChildren() 
at System.Web.UI.Control.DataBind(Boolean raiseOnDataBinding) 
at System.Web.UI.Control.DataBind() 
at System.Web.UI.WebControls.Repeater.CreateItem(Int32 itemIndex, ListItemType itemType, Boolean dataBind, Object dataItem) 
at System.Web.UI.WebControls.Repeater.AddDataItemsIntoItemsArray(IEnumerable dataSource, Boolean useDataSource) 
at System.Web.UI.WebControls.Repeater.PostGetDataAction(IEnumerable dataSource) 
at System.Web.UI.WebControls.Repeater.CreateControlHierarchy(Boolean useDataSource) 
at CMS.DocumentEngine.Web.UI.BasicRepeater.CreateControlHierarchy(Boolean useDataSource) 
at System.Web.UI.WebControls.Repeater.OnDataBinding(EventArgs e) 
at System.Web.UI.WebControls.Repeater.DataBind() 
at CMS.DocumentEngine.Web.UI.BasicRepeater.DataBind() 
at CMS.DocumentEngine.Web.UI.CMSRepeater.DataBind() 
at CMS.DocumentEngine.Web.UI.CMSRepeater.ReloadDataInternal(Boolean forceReload) 
at CMS.DocumentEngine.Web.UI.CMSRepeater.<>c__DisplayClass3.b__2() 
at CMS.Base.Web.UI.ControlsExtensions.CallHandled(Control ctrl, Action func) 

基于我后,我检查了我的列字段名称是正确的,我怀疑我不能指向正确的异常班级名称。

一旦我从ClassNames='<%# CLASS_NAME %>' Path='<%# Path %>'>切换到ClassNames="CMS.Topic" Path="/Shared/Topic/%",那么一切顺利。

我试图让ClassNamesPath成为动态可控的。

+0

你好。你不需要在最后关闭标签吗? – Luke359

+0

这是你的意思吗? '' – SoYuJe

回答

2

如果CLASS_NAME和路径路径是在代码隐藏文件属性,你可以尝试在页面加载代码隐藏文件来初始化它们转发。像rptTopic.ClassNames = CLASS_NAME;rptTopic.Path = Path。或者使用<%=...%>代替<%#...%>

<cms:CMSRepeater ID="CMSRepeater1" runat="server" SelectOnlyPublished="true" OrderBy="NodeLevel,NodeOrder" ClassNames='<%= CLASS_NAME %>' Path='<%= Path %>'/> 
+0

为什么我从不尝试? 在页面加载文件后面的代码中使用它们初始化转发器工作正常! – SoYuJe

0

下次从事件日志中添加日志。 Try:

<cms:CMSRepeater ID="rptTopic" runat="server" SelectOnlyPublished="true" OrderBy="NodeLevel,NodeOrder" ClassNames='<%# CLASS_NAME %>' Path='<%# Path %>' /> 

注意结束括号之前的斜线字符。

编辑: 尝试使用

<%# Eval("ClassName")%> 
+0

已添加事件日志。 – SoYuJe

0

由于意见不能包括代码标签,如果你需要设置一个中继器的价值超过你可以在内嵌标签做,你可以这样做:

<cms:CMSRepeater ID="rptTopic" runat="server" SelectOnlyPublished="true" OrderBy="NodeLevel,NodeOrder" /> 
<script runat="server"> 
    protected override void OnInit(EventArgs e) 
    { 
     rptTopic.ClassName = CMS.Helpers.ValidationHelper.GetString(Eval("ClassName"),""); 
     rptTopic.Path = CMS.Helpers.ValidationHelper.GetString(Eval("Path"),""); 
    } 
</script>