2013-03-22 123 views
2

我在asp.net中有一個fileupload控件,用於上傳圖片。我想顯示預覽圖像在012.net控制asp.net。這裏是ASPX代碼對象不可序列化

ASPX

<script type="text/javascript"> 

    function FU_Img_onchange(oFU_Img) { 
     alert("sak"); 
     var img = document.getElementById("<%= Btn_Preview.ClientID%>"); 
     img.click(); 

    } 
    function FU_Video_onchange(oFU_Vid) { 
     var vid = document.getElementById("<%= VidPreview.ClientID %>"); 
     vid.click(); 
    } 
</script> 


背後

protected void Btn_Preview_Click(object sender, EventArgs e) 
     { 
      try 
      { 
       if (FU_Img.HasFile) 
       { 
        string path = Server.MapPath("/TempImages"); 


        FileInfo oFileInfo = new FileInfo(FU_Img.PostedFile.FileName); 
        string fileName = oFileInfo.Name; 

        string fullFileName = path + "//" + fileName; 
        string imagePath = "/TempImages/" + fileName; 

        if (!Directory.Exists(path)) 
        { 
         Directory.CreateDirectory(path); 
        } 
        Session["FileUpload"] = FU_Img; 
        FU_Img.PostedFile.SaveAs(fullFileName); 
        Img_Prof.ImageUrl = imagePath; 
       } 
      } 
      catch (Exception ex) 
      { 
       using (StreamWriter sw = new StreamWriter("/log.txt")) 
       { 
        sw.NewLine = DateTime.Now.ToString() + "--->>" + ex.ToString() + "\n" + ex.StackTrace.ToString(); 
       } 
      } 
     } 

,你可以看到C#代碼,我把我的形象控制會話。它在開發服務器上工作正常。當我張貼的網站域名我得到的問題

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.

堆棧跟蹤

[SerializationException: Type 'System.Web.UI.WebControls.FileUpload' in Assembly 'System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' is not marked as serializable.] 
    System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(RuntimeType type) +7738443 
    System.Runtime.Serialization.FormatterServices.GetSerializableMembers(Type type, StreamingContext context) +258 
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo() +111 
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +422 
    System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(Object obj, ISurrogateSelector surrogateSelector, StreamingContext context, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, ObjectWriter objectWriter) +51 
    System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(Object graph, Header[] inHeaders, __BinaryWriter serWriter, Boolean fCheck) +410 
    System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(Stream serializationStream, Object graph, Header[] headers, Boolean fCheck) +134 
    System.Web.Util.AltSerialization.WriteValueToStream(Object value, BinaryWriter writer) +1577 

[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) +1662 
    System.Web.SessionState.SessionStateItemCollection.WriteValueToStreamWithAssert(Object value, BinaryWriter writer) +34 
    System.Web.SessionState.SessionStateItemCollection.Serialize(BinaryWriter writer) +606 
    System.Web.SessionState.SessionStateUtility.Serialize(SessionStateStoreData item, Stream stream) +239 
    System.Web.SessionState.SessionStateUtility.SerializeStoreData(SessionStateStoreData item, Int32 initialStreamSize, Byte[]& buf, Int32& length) +72 
    System.Web.SessionState.OutOfProcSessionStateStore.SetAndReleaseItemExclusive(HttpContext context, String id, SessionStateStoreData item, Object lockId, Boolean newItem) +87 
    System.Web.SessionState.SessionStateModule.OnReleaseState(Object source, EventArgs eventArgs) +560 
    System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75` 

我肯定有什麼毛病FileUpload控件和會話。但請正確指導我應該怎麼做? 在此先感謝

+1

堆棧跟蹤和消息清楚地說明了問題:您使用StateServer或數據庫來存儲會話數據,這意味着它必須被序列化以存儲在任一位置。您嘗試在會話中保留的FileUpload控件不可序列化,因此失敗。 – JerKimball 2013-03-22 07:20:15

回答

2

通過查看異常,可能會將SessionMode設置爲SQLServer或StateServer,將其更改爲InProc並查看其是否有效。如果它的工作原理意味着您的會話持久性到後端存儲不起作用,請檢查該代碼或發佈代碼,以便我們可以深入瞭解該問題。

+0

沒有什麼像''在我的'web.config'中,默認情況下它可能是StateServer或SQLServer。我把它塞進了「InProc」。它爲我工作。 – 2013-03-22 07:33:20

+0

@ SaghirA.Khatri:一個Khatri如果它的工作,你需要它作爲InProc比接受答案:) – TalentTuner 2013-03-22 07:34:49

+0

你是什麼意思的會話持續。請告訴我。 – 2013-03-22 07:35:36