0
我有一個具有DropDownList的窗體。我正在使用SQLServer狀態模式將會話保存在SQL Server中。表單顯示正確;但是,它會在表單提交期間拋出異常。我一直在尋找和嘗試一些建議的答案,這些答案是在線發佈的,沒有運氣。我在這裏做錯了什麼?@HhtmlDropdown拋出SerializationException異常
//This is the section where I am building the SelectList Item in the controller
var ListDepartment = ManageUsersMembership.GetDepartment(SessionWrapper.studentBookTrade.SelectedSchoolID);
// book.DepartmentList = ListDepartment; //new SelectList(ListDepartment, "DepartmentID", "DepartmentName", SessionWrapper.studentBookTrade.SelectedDepartmentID);
List<SelectListItem> lDepartment = new List<SelectListItem>();
foreach (var item in ListDepartment)
{
if (SessionWrapper.studentBookTrade.SelectedDepartmentID > 0 && item.DepartmentID == SessionWrapper.studentBookTrade.SelectedDepartmentID)
{
lDepartment.Add(new SelectListItem { Text = item.DepartmentName, Value = item.DepartmentID.ToString(), Selected = true });
}
else
{
lDepartment.Add(new SelectListItem { Text = item.DepartmentName, Value = item.DepartmentID.ToString() });
}
}
book.DepartmentList = lDepartment;
//this is my property in the Model:
public virtual IEnumerable<SelectListItem> DepartmentList { get; set; }
//This is the HTML Code in my View:
@Html.DropDownListFor(model => model.DepartmentID, new SelectList(Model.DepartmentList, "Value", "Text"), "Select Department", new {@class="form-control", id="DepartmentID", onchange = "ValueSelected()" })
@Html.ValidationMessageFor(model => model.DepartmentID)
//The exception
Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Web.HttpException: Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[SerializationException: Type 'System.Web.Mvc.SelectList' in Assembly 'System.Web.Mvc, Version=4.0.0.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is not marked as serializable.]
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +10751795
System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +230
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +121
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, SerializationBinder binder) +185
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(WriteObjectInfo objectInfo, NameInfo memberNameInfo, NameInfo typeNameInfo) +565
System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +446
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +131
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1666
[HttpException (0x80004005): Unable to serialize the session state. In 'StateServer' and 'SQLServer' mode, ASP.NET will serialize the session state objects, and as a result non-serializable objects or MarshalByRef objects are not permitted. The same restriction applies if similar serialization is done by the custom session state store in 'Custom' mode.]
System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1754
System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34
System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +628
System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +240
System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length, Boolean compressionEnabled) +62
System.Web.SessionState.SqlSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +135
System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +565
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +136
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69
我仍然得到例外。但是,我在我的模型中添加了序列化部分類,[Serializable] public partial class SelectList { }。它正在工作。 – user3802347 2014-10-29 14:05:10