我有一个radcombobox,我试图将所选值绑定到我从数据库中的表中撤回的数据。
<telerik:RadComboBox ID="cboRole" runat="server" DataValueField="UserType.ID" DataTextField="UserType.Value" Text='<%# Bind("UserType") %>' DataSourceID="odsCertifications" >
</telerik:RadComboBox>
这是我的数据
public partial class Certification
{
public Certification()
{
this.Courses = new HashSet<CertificationCourse>();
}
public int ID { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public int Duration { get; set; }
public Nullable<System.DateTime> Expiration { get; set; }
public bool IsActive { get; set; }
public string CreatedBy { get; set; }
public System.DateTime CreatedOn { get; set; }
public string UpdatedBy { get; set; }
public Nullable<System.DateTime> UpdatedOn { get; set; }
public Nullable<int> UserTypeID { get; set; }
public virtual ICollection<CertificationCourse> Courses { get; set; }
public virtual SystemCode UserType { get; set; }
}
UserType
具有Value和ID属性,我尝试绑定DataTextFields
和DataValueFields
。但是,在尝试以这种方式绑定时,我收到了javascript异常。如果省略了javascript消息,那么我无法完全看到确切的错误消息是什么。
以下是chrome js调试器告诉我的事情:
Uncaught Sys.WebForms.PageRequestManagerServerErrorException:
Sys.WebForms.PageRequestManagerServerErrorException: Object of type
System.Data.Entity.DynamicProxies.Certification_D985D293565CB0BFD87FA8F8F44D70ACF4130D6E138A82D6E486544C53D7FE10 does ...<omitted>...y.
<asp:ObjectDataSource runat="server" ID="odsCertifications" SelectMethod="GetActiveCertifications" TypeName="SitefinityWebApp.Controllers.CertificationController"></asp:ObjectDataSource>
public List<Certification> GetActiveCertifications()
{
using (var db = new Entities())
{
try
{
return db.Certifications.Include("UserType").Where(x => x.IsActive == true).OrderBy(x => x.Title).ToList();
}
catch (Exception ex)
{
ExceptionManager.LogException(this, ex);
return null;
}
}
}
答案 0 :(得分:1)
我对RAD的RAD版本没有任何了解,但我认为问题来自于您尝试将 SystemCode 对象绑定到ComboBox的事实,只能处理像int / string这样的简单类型 我想你应该使用 UserTypeID 绑定,但我不确定它是否会起作用,因为它可以为Nullable。
答案 1 :(得分:0)
你想做什么?我想&#34; odsCertifications&#34;不是一个清单。因此,如果您只想显示认证对象中的绑定用户类型值。您不需要将任何源绑定到组合框。只需将列表项添加到cs中的combobox即可。一边说:
cbcRole.Items.Add(new RadComboboxItem(){Value=odsCertifications.UserType.ID, Text=odsCertifications.UserType.Value}) //RadComboboxItem and properties can be different I wrote only as example.
如果您希望使用所有用户类型填充组合框并显示绑定用户类型值(在认证对象中作为选定项),则必须将UserType列表对象绑定到组合框,如:
<telerik:RadComboBox ID="cboRole" runat="server" DataValueField="ID" DataTextField="Value" DataSourceID="userTypes" ></telerik:RadComboBox>
的DataSourceID =&#34; userTypes&#34;这里,userTypes必须是List对象,如
List<UserType> userTypes;
您可以在cs中设置所选项目。一边说:
cboRole.SelectedValue=odsCertifications.UserType.ID;
答案 2 :(得分:0)
要获取实际的服务器异常,请删除AJAX。你得到的是MS AJAX在部分回发期间捕获的服务器异常,并作为JavaScript错误发送(截断)到客户端。
我还认为您可能需要将您需要的字符串属性公开为直接字段,而不是作为传递给组合属性的字段的子字段