我有一个ObjectDataSource
声明如下:
<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>
控件问题是LocationCodes
声明如下:
<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>
适配器上的服务器端Select
方法定义如下:
[DataObjectMethod(DataObjectMethodType.Select, true)]
public List<Payment> GetPayments(
DateTime startDate,
DateTime endDate,
object selectedLocationCodes)
{
}
现在, 即使ListItemCollection
成功传递到Select
方法,Select
方法中的代码也可以无误处理 < / strong>,Application_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.
答案 0 :(得分:0)
好的,我解决这个问题的方法是通过添加ViewState
来ObjectDataSource
元素关闭ViewStateMode="Disabled"
。
答案 1 :(得分:0)
问题是您无法序列化对象。如果你要改变 “ 对象selectedLocationCodes ”到某种预定义的类然后应该没有问题。 为了对象进行序列化,它基本上需要分解为XML,这意味着它需要知道每个字段的数据类型。对象的描述不够具体,因为它可以是任何东西。