2016-08-26 14 views
8

Pracujemy nad interfejsem Kendo MVC, w którym wysyłamy dane z jednego widoku do innego, wszystkie dane (testbox, rozwijanie) są przekazywane do następny widok z wyjątkiem załączników (pdf, xlsx).Nie można przenosić załączników poprzez przesyłanie kendo z jednego widoku do innego widoku

Poniżej znajduje się kod, który w kontrolerze, który Pisaliśmy do przechwytywania z pola widzenia i zapisać dane i przekazać te same dane do innego widoku i powiązać dane do kontroli kendo (sterowanie Załaduj także)

public ActionResult SaveData(System.Web.Mvc.FormCollection form, IEnumerable<HttpPostedFileBase> files) // insert operation 
    { 
     //*************************// 
     if (form != null) 
     { 
      string ddluserexceptioncategory = Convert.ToString(form["txtexceptioncategory"], CultureInfo.InvariantCulture); 

      if (!string.IsNullOrEmpty(ddluserexceptioncategory)) 
      { 
       ddluserexceptioncategory = ddluserexceptioncategory.Trim(); 
      } 
      if (ddluserexceptioncategory == "User Management") 
      { 
       //Bind the data to the class object(_clsObj) 


       if (files != null) 
       { 
        TempData["FileName"] = files; 
        _clsObj.Files = files; 
       } 
       TempData["SecondViewData"] = _clsObj; 


       return RedirectToAction("ExceptionType", "Home", new { id = 0, regionId = _clsObj.RegionId, status1 = "New,In Progress", keyword1 = string.Empty }); 
      } 
     } 

     string regions = "", statusValue = ""; 
     if (form != null) 
     { 
      regions = form["hiddenregionselected"] + ""; 
      statusValue = form["hiddenstatusselected"] + ""; 
     } 

     return RedirectToAction("homepage", "Home", new { region = regions, status = statusValue }); 
    } 

Poniżej znajduje się kod, który możemy wiązać żądanie do drugiego

@if (TempData["FileName"] != null) 
{ 
IEnumerable<HttpPostedFileBase> firstFile = (IEnumerable<HttpPostedFileBase>)TempData["FileName"]; 

<div class="k-dropzone"> 
    <div class="k-button k-upload-button"> 
     <input name="files" type="file" data-role="upload" multiple="multiple" autocomplete="off" tabindex="-1" class="valid" style="display: none;"> 
     <input id="files" name="files" type="file" data-role="upload" multiple="multiple" autocomplete="off"> 
     <ul id="files1" class="k-upload-files k-reset"> 

      @foreach (var file in firstFile) 
      { 
       string filename= Path.GetFileName(file.FileName); 
       <li class="k-file" data-uid="7aa03676-4dac-468e-b34a-99ac44d23040"> 
        <span class="k-icon k-success">uploaded</span> 
        <span class="k-filename" title="@filename">@filename</span> 
        <strong class="k-upload-status"> 
         <span class="k-icon k-delete"></span> 
        </strong> 
       </li> 
      } 
     </ul> 

    </div> 
</div> 
<script> 
    jQuery(function() 
    {jQuery("#files").kendoUpload(
    {"select":uploadselect, 
     "localization":{"select":"Browse file", 
      "headerStatusUploading":"uploading..", 
      "headerStatusUploaded":"uploded.."}, 
     "async":{"saveUrl":"/Home/Save", 
      "autoUpload":false,"removeUrl": 
       "/Home/Remove"}});}); 

</script> 
} 
    else 
{ 
@(Html.Kendo().Upload().Name("files").Async(a => a.Save("Save", "Home").Remove("Remove", "Home").AutoUpload(false)).Multiple(true).Messages(m => 
{ 
    m.Select("Browse file"); 

}).Events(events => events.Select("uploadselect"))) 

} 

jakieś sugestie lub pomoc jest mile widziane.

Odpowiedz

3

Domyślam się, że problem pochodzi z użycia TempData, aby pobrać te dane ze znaczników do kontrolera lub odwrotnie.

Jak zapewne wiesz, wszystko, co umieścisz w TempData, zostanie odrzucone po zakończeniu następnego żądania (Using Tempdata in ASP.NET MVC - Best practice, http://www.codeproject.com/Articles/476967/What-is-ViewData-ViewBag-and-TempData-MVC-Option).

Proponuję spróbować użyć ViewBag, aby udowodnić tę teorię. Jeśli się okaże, możesz pomyśleć o przekazaniu tych danych jako części złożonego obiektu zamiast używania słowników danych MVC.

Powiązane problemy