2013-08-12 2 views
0

자바 스크립트와 아약스로 여러 가지 방법을 시도해 보았습니다. 당신이부분보기에서 팝업을 열고 부모 부분보기를 새로 고침

전에이 상황이 발생하면 도와주세요 내가보기 hfnlp.cshtml

@model IMONLP.Models.HFADMwrap 
@using ADM 
@{ 
    ViewBag.Title = "HFNLP"; 
} 
<html> 
<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> 
<body> 


**<div id="popup"> 
    @if (true) 
    { 
     Html.RenderPartial("popup", Model); 
    } 
</div>** 

<div id="Quadrant"> 
     @if (@Model.flag == 1) 
     { 
      Html.RenderPartial("grid", Model); 
     } 
    </div> 


</body> 
</html> 

내가 위에서 볼 부분이다이 popup.cshtml이에게 있습니다. 사용자로부터 콘텐츠를 열고 가져 오는 팝업이있을 것입니다. 이 작업을 수행해야합니다. 1. 콘텐츠를 얻고 모델 에 글을 쓰십시오 2. 팝업을 닫으십시오 3. 부모에게 제어권을 다시 가져오고 부모는 다시로드하지 말아야합니다. popup.cshtml (부분 뷰) - [parent of winodw 다시로드하십시오. 여기

는 버튼을 popup.cshtml

@model IMONLP.Models.HFADMwrap 

@{ 
    ViewBag.Title = "popup"; 
} 
<html> 
<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
    <script src="~/Scripts/jquery.unobtrusive-ajax.js"></script> 
<script type="text/javascript"> 

    //pop up window 
    $(function() { 
     $('#ClickMe').click(function() { 
      window.open('@Url.Action("FileUpload", "HFNLP")', 'FileUpload', 'height=' + (window.screen.height - 100) + ',width=700,left=' + (window.screen.width - 250) + ',top=10,status=no,toolbar=no,resizable=yes,scrollbars=yes'); 
     }); 
    }); 
</script> 

<body> 

    <input type="button" id="ClickMe" name="ClickMe" value="New Visit"/> 

</body> 

</html> 

을 클릭하면 팝업

마지막으로

를 열어야합니다 버튼

를 클릭 할 때라는 팝업 창 이잖아입니다 fileupload.cshtml입니다
@model IMONLP.Models.HFADMwrap 
@using ADM 
@{ 
    ViewBag.Title = "FileUpload"; 
} 

<html> 
<script src="~/Scripts/jquery-1.8.2.min.js"></script> 


<script type="text/javascript"> 
    $(function() { 
     $('#ClickMe').click(function() { 

      //window.opener.location.href = '@Url.Action("AfterUpload", "HFNLP", new { [email protected]})';*@ 
      window.opener.location.href = window.opener.location.href; 
      window.close(); 
     }); 
    }); 
</script> 
<body> 

    <br /> 
    @using (Html.BeginForm("AfterUpload", "HFNLP")) 
    { 

          <input type="button" value="submit & View Codes" style="position: absolute; left: auto; width: auto;" id="ClickMe" name = "ClickMe"/> 
          @*<input type="hidden" name="a" value="@Model.Hfnlp.unstructured_text"/>*@ 


          @if (!string.IsNullOrEmpty(Model.Hfnlp.unstructured_text)) 
          { 
          @Html.TextAreaFor(m => m.Hfnlp.unstructured_text, new { name= "textBox1", @value = Model.Hfnlp.unstructured_text, style = "width: 650px; height: 400px;"}) 
          } 
          else 
          { 
          @Html.TextAreaFor(m => m.Hfnlp.unstructured_text, new { style = "width: 650px; height: 400px;" }) 
          } 


    }  
     @using (Html.BeginForm("FileUploadw", "hfNLP", FormMethod.Post, new { enctype = "multipart/form-data" })) 
     { 

      <input type="file" name="file" id="file" /><br /> 
      <input type="submit" value="Upload" name="submit" />   
     } 

</body> 
</html> 

이 코드를 사용하면 팝업 창을 표시하고 액션을 호출 할 수 있습니다. 컨트롤러 및 닫기 팝업. 그런 다음 전체 상위 페이지가 다시로드됩니다. 모델에 전달 된 데이터가 손실됩니다. 이 상황에서 저를 도우십시오.

** ** * * ** * **EDIT* ** * ** * ** * *

public ActionResult FileUpload(HFADMwrap wrap) 
     { 
      HFNLP hf = new HFNLP(); 
      wrap.Hfnlp = hf; 
      return View("FileUpload", wrap); 
     } 

     public ActionResult FileUploadw(HFADMwrap wrap, HttpPostedFileBase file) 
     { 
      HFNLP hf = new HFNLP(); 
      if (wrap.Hfnlp == null) 
      { 
       wrap.Hfnlp = hf; 
      } 
      file = Request.Files[0]; 
      BinaryReader b = new BinaryReader(file.InputStream); 
      byte[] binData = b.ReadBytes(file.InputStream.Length.ToInt32()); 
      string filecontent = System.Text.Encoding.UTF8.GetString(binData); 
      hf.unstructured_text = filecontent; 
      /*upload and get the file content */ 

      if (wrap.Hfnlp.unstructured_text == null) 
      { 
       return RedirectToActionPermanent("FileUpload", "FileUpload"); 
      } 
      wrap.Hfnlp = hf; 
      return PartialView("FileUpload", wrap); 
     } 

나는이 지금

<div id="popup"> 
<input type="button" value="something" onClick="?(What should be here)"/></div> 
+0

우선 RenderPartial은 단순히 부모보기 내에서 면도기 뷰를 렌더링하므로 실제로는 * html * 및 * body * - 태그를 건너 뜁니다. - 또한, 나는 당신이 팝업으로 무엇을 의미하는지 확실히 모르겠다. 당신은 (http://jqueryui.com/dialog/)와 같은 대화 상자를 만들고 싶습니까? – peter

답변

0

내가 이런 일을 JQuery와 UI 대화 상자를 사용했습니다. 보기에 부분 권한을로드 할 이유가 없습니다. 내 *의 .cshtml에서

나는 결국 될 것 사업부를 내 대화

<div id="delegateDialog" class="actionDialog"></div> 

특정 버튼을 클릭하면 다음,이 방법은 대화로드를 호출 할 것이다 :

var loadDelegateDialog = function(processInstanceID, serialNumber) { 
    var $dialog = $('#delegateDialog'); 
    var title = "Delegate Workflow #" + processInstanceID; 
    var actionUrl = '@Url.ActionFor((TaskListController c) => c.GetDelegateDialog(Model.TaskListID, null, null))'; 

      $.ajax({ 
       url: actionUrl, 
       type: 'POST', 
       data: { 
        processInstanceID: processInstanceID, 
        serialNumber: serialNumber 
       }, 
       dataType: 'html', 
       success: function(data) { 
        $dialog.html(data); 

        $dialog.dialog({ 
         autoOpen: true, 
         closeOnEscape: false, 
         modal: true, 
         resizable: false, 
         draggable: false, 
         dialogClass: "no-close", 
         maxHeight: 600, 
         width: 500, 
         position: { my: "top", at: "top+20", of: window }, 
         hide: { effect: "fade", duration: 250 }, 
         show: { effect: "fade", duration: 250 }, 
         title: title, 
         close: function() { 
          // call a method to reload your parent page via ajax 
         } 
        }); 
       }, 
       error: function(jqXhr, textStatus, errorThrown) { 
        $.notifyBar({ 
         html: jqXhr.responseText, 
         cls: 'error', 
         delay: 10000 
        }); 
       } 
      }); 
     }; 

loadDelegateDialog js 메서드는 내 컨트롤러를 호출하여 부분 뷰를 반환하는 GetDelegateDialog를 호출합니다. 그런 다음 내용이 대화 상자에 배치됩니다.

[HttpPost] 
public PartialViewResult GetDelegateDialog(int id, int? processInstanceID, string serialNumber) 
{ 
    var taskListID = id; 

    if (!processInstanceID.HasValue) 
    { 
     throw new InvalidOperationException(Resources.Web_ErrorMsg_MissingProcessIntanceID); 
    } 

    if (string.IsNullOrWhiteSpace(serialNumber)) 
    { 
     throw new InvalidOperationException(Resources.Web_ErrorMsg_MissingSerialNumber); 
    } 

    var model = this.taskListService.BuildDelegateDialogViewModel(taskListID, processInstanceID.Value, serialNumber); 

    return this.PartialView("_DelegateDialog", model); 
} 

대화의 close 메소드 그들 중 새로 고침/페이지를 다시로드, 또는 당신이 전체 다시로드를하지 않을 수없는 경우 다른 JS 방법에 전화를 걸 유무 : 여기

는 컨트롤러 방법 AJAX를 호출하여 원하는 데이터를 가져 와서 페이지의 해당 섹션을 채 웁니다.

+0

답장을 보내 주셔서 감사합니다. 이 대답은 내가하려고하는 것에 대한 대안으로 보인다. 컨트롤러 코드가 포함 된 내 편집을 확인하십시오. 대화 상자에서 다른보기가 필요할 수 있습니다. 제 컨트롤러에 따라 적절한 코드를 제발 주시겠습니까? – RJ24

관련 문제