Search code examples
c#asp.netserializationwebformsobjectdatasource

Error Passing ListItemCollection via ObjectDataSource to Custom Adapter


I have an ObjectDataSource declared like this:

<asp:ObjectDataSource ID="PaymentsDataSource"
                      runat="server"
                      DataObjectTypeName="Payment"
                      TypeName="PaymentAdapter"
                      SelectMethod="GetPayments">
    <SelectParameters>
        <asp:ControlParameter ControlID="StartDate"
                              PropertyName="Text"
                              Name="startDate"
                              Type="DateTime" />
        <asp:ControlParameter ControlID="EndDate"
                              PropertyName="Text"
                              Name="endDate"
                              Type="DateTime" />
        <asp:ControlParameter ControlID="LocationCodes"
                              PropertyName="Items"
                              Name="selectedLocationCodes"
                              Type="Object" />
    </SelectParameters>
</asp:ObjectDataSource>

The control is question is LocationCodes declared like this:

<select id="LocationCodes"
        disabled="disabled"
        runat="server"
        class="chzn-container"
        multiple=""
        data-placeholder="Choose a Location Code(s)"
        style="width: 100%;"
        data-class="span10">
</select>

The server-side Select method on the adapter is defined like this:

[DataObjectMethod(DataObjectMethodType.Select, true)]
public List<Payment> GetPayments(
    DateTime startDate,
    DateTime endDate,
    object selectedLocationCodes)
{
}

Now, even though the ListItemCollection is successfully passed into the Select method and the code in the Select method can process without error, the following error is still being thrown passively in Application_Error. Is there a way to ignore this error?

11/15/2012 13:37:49 168 (Machine=, App=34a846f1, Project=null, Dept=null, Thread=007, TraceLevel=1)
    Exception Source: mscorlib
    Exception Type: System.Runtime.Serialization.SerializationException
    Exception Message: Type 'System.Web.UI.WebControls.ListItemCollection' in Assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.

Solution

  • Okay, so the way I solved this was by turning ViewState off on the ObjectDataSource element by adding this ViewStateMode="Disabled".