2013-03-23 20 views
0

朋友你好的另一個instanse任何衝突...保持與TempData的頁面的附加文件列表中沒有與網頁

我有一個MVC項目和一個附件盒形式(如雅虎郵件撰寫)

例如 「create_request.cshtml」


我想:

每個用戶填寫字段並上傳他/她的文件(當用戶選擇任何一個文件時,我通過Ajax發佈每個文件),並在提交表單後,如果頁面有錯誤(檢查服務器端),用戶會看到上傳的文件響應頁面(與突出顯示的錯誤響應形式)...


我實現了上面的場景非常漂亮:

(阿賈克斯+的TempData +保存文件服務器端befor提交+上傳文件大拇指befor提交表格)

在我的控制器中:

public void KeepTempData(string name, string value) 
    { 
     TempData[name] = value; 
    } 
在我看來

我送每個文件名到服務器我被另一個AJAX代碼上傳後:

ajaxPostData(KeepTempData, "Attachments", $('#Attachments').val()); 

但我有一個問題:

因爲我用TempData保留上傳的文件名列表,如果用戶在當前頁面附加一個文件然後打開一個新的Tab i在她/他的瀏覽器中進入「create_request」頁面地址。他/她看到一個空的形式,其附加的文件...

我的解決方案:

也許我可以解決這個問題,每個頁面(各種形式)的唯一密鑰並將其保存在一個會話變量併爲每個頁面請求的隱藏字段>>使用:「反僞造令牌與鹽」「DateTime.Now」

我發現This post在網絡上。它的問題就像是我的問題。其解決方案就像我的解決方案一樣。


,這是什麼問題,在MVC相應的解決方案???

什麼是您使用的TempData的(或會話的),而當用戶有一個瀏覽器(如firfox)的某些選項卡頁面一個不同的請求的任何衝突的建議???

回答

0

我解決了這個問題:

  • 從查詢字符串
  • 如果該鍵爲空
    • 我產生在控制器的行動的新的和獨特的鍵
    • 重定向獲取密鑰頁面轉換爲帶有密鑰的新網址(作爲查詢字符串鍵值)
  • 其他
    • 將密鑰添加到ViewBag(用於設置視圖中的隱藏字段)
    • 將密鑰保存在會話變量中。

public virtual ActionResult Create(string attkey) 
{ 
    if (string.IsNullOrEmpty(attkey)) 
    { 
     attkey = generatNewNameForSession('key'); // for examle: kye_jhtyujbvkjadsgfvn 
     Response.Redirect("myControle/Create, attkey="+attkey), true); 
     } 
     ViewBag.AttachmentsKey = attkey; 
     if (Session[attkey] == null) 
      KeepData(attkey, ""); 
     . 
     . 
     . 

現在我的每個頁面實例都有一個標識,現在我可以決定是否顯示先前附加的文件。

0

TempData壽命很短。您應該使用會話而不是TempData。

Infact會話對象是TempData後面的後備存儲。但是,存儲在TempData中的數據可用於當前請求和後續請求。

+0

我填補我對這個事件的TempData(基地附件欄>>這是一個隱藏字段): -On用戶選擇一個文件並上傳 -On刷新 頁面-On得到響應頁面(後提交) 我的問題: 如果用戶在當前頁面中附加一個文件,然後在她/他的瀏覽器中打開一個新的標籤並進入「create_request」頁面地址。他/她看到一個帶有附件的空表單... – RAM 2013-03-23 23:13:59

相關問題