2014-10-28 58 views
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 

回答

2

我想你在這裏有太多。試着改變你的代碼,這樣

public IEnumerable<SelectListItem> DepartmentList { get; set; } 

我通常用列表,但IEnumerable的應太

然後對你的看法,你不需要投列表

@Html.DropDownListFor(model => model.DepartmentID, Model.DepartmentList, "Select Department", new {@class="form-control", id="DepartmentID", onchange = "ValueSelected()" }) 

的「for」幫手將爲你映射列表。看看這是否有幫助

+0

我仍然得到例外。但是,我在我的模型中添加了序列化部分類,[Serializable] public partial class SelectList { }。它正在工作。 – user3802347 2014-10-29 14:05:10