2014-01-09 73 views
1

我很抱歉,如果這是一個騙局,但我一直沒能找到一個確切的解決方案,我的問題。從IFRAME發佈,並返回到部分在父母的視圖

目標: 上傳文件,做功,返回結果。容易嗎?

問題: 我一直在這工作了幾天沒有任何運氣。我試過XmlHttpRequest,但是由於瀏覽器的限制(無法擺脫逼迫終端用戶和客戶端使用IE10或更高版本),這似乎不是一種選擇。

我所花費的大部分時間都是通過iframe上傳的。我已經得到了上傳片的工作正常。我需要做的是在對文件進行處理之後,結果應該返回到父窗口和部分視圖。

----------------------Index-------------------- 
Partial View Data Entry----Partial View Results 
-----Upload iframe----------Results from file-- 

這裏就是我有下面的代碼:

DataEntry.cshtml

<div> 
    ...textboxes, radiobuttons, etc... 
    <iframe id="uploadFrame" class="seamless" frameborder="0" src='@Url.Action("UploadFile")'></iframe> 
</div> 

UploadFile.cshtml

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#uploadFile").click(function() { 
      $("#field1").val(window.parent.document.getElementById("field1").value); 
      $("#field2").val(window.parent.document.getElementById("field2").value); 
      ...other fields... 

      $("#fileForm").submit(); 
     }); 

     $("#file").change(function() { 
      if ($("#file").val() != "") { 
       $("#uploadFile").removeAttr("disabled"); 
      } 
      else { 
       $("#uploadFile").attr("disabled", "disabled"); 
      } 
     }); 
    }); 
</script> 

<form id="fileForm" action='@Url.Action("UploadFile")' method="post" enctype="multipart/form-data"> 
    <div> 
     Please use this template (link) to upload a list of employees and dependents. 
    </div> 
    <div class="center"> 
     <br /> 
     <input type="hidden" id="field1" name="field1" /> 
     <input type="hidden" id="field2" name="field2" /> 
     <input type="file" id="file" name="file" /><br /><br /> 
     <input type="button" disabled="disabled" id="uploadFile" name="uploadFile" value="Upload File" class="greenButton" /> 
    </div> 
</form> 

HomeController.cs

public ActionResult UploadFile() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult UploadFile(String field1, String field2, HttpPostedFileBase file) 
{ 
    ...do work... 

    //return View("UploadFile", object); 
    //return View("Result", object); 
    //return ? 
} 

退貨部分是我卡住的地方。我能做些什麼來將對象返回到局部視圖,而不在iframe中加載局部視圖?

任何想法或至少在正確的方向點將不勝感激。即使是重複的鏈接!

回答

0

我最終找到基於這些問題的概念的解決方案:
Get JSON text from HTML iframe
How to display action result of iframe in parent window

基本上,我修改了HomeController中> UploadFile行動回報JSON文本

JsonResult result = new JsonResult(); 
result.Data = listOfEmployeesWithRates.ToList(); 
result.ContentType = "text/plain"; 
return result; 

然後在jQuery,我檢查iframe是否包含加載時的JSON。

//uploadFrame 
$("#uploadFrame").load(function(){ 
if ($("#uploadFrame").contents().find("pre").html() != null) { 
    //pass json via ajax call to Result partial view 

    //refresh iframe 
    $("#uploadFrame").attr('src', $("#uploadFrame").attr('src')); 
} 
}); 
0

部分視圖將在返回時始終刷新。事情是如何運作的。除非你使用AJAX進行不同的上傳。

請參考以下鏈接:

Ajax.BeginForm in MVC to upload files

或者用在你的問題中描述的同樣的邏輯,你可以把一些額外的邏輯視圖,例如像使用的TempData作爲在動作控制器中設置的標誌,以確定局部視圖用於上傳或顯示結果。

然後,在您的部分視圖中,使用該標誌來相應地呈現UI。

希望它有幫助。

+0

Hatjhie,據我所知,局部視圖會刷新返回。我希望使用返回對象刷新它,但我不希望部分視圖顯示在iframe中,這是我所能完成的。你提供的鏈接似乎沒有涵蓋這一點,但也許我錯過了一些東西。 :) –

+0

好的。感謝您的澄清。 Yeap,鏈接是以不同的方式進行上傳。也許,你分享你的答案?謝謝! – Hatjhie