2009-12-23 5 views
1

Я попытался найти ответ на этот вопрос и натолкнуться на несколько вещей, которые не дали желаемого результата.Скрыть iFrames с помощью контроллера

Так что я написал HTML Helper, что нагрузки в (FancyBox) плавающем фрейме:
<%= Html.ActionFrame("Projects", "Edit") %>

На открывшейся странице есть кнопка сохранения, которая в настоящее время сохраняет данные и перенаправляет на страницу индекса внутри IFRAME. Поскольку действие идет:

 if (ModelState.IsValid) 
     { 
      projectRepository.saveProject(record); 
      return RedirectToAction("Index"); 
     } 

Но то, что я хочу, чтобы иметь возможность делать то, что при нажатии на сохранить плавающий фрейм будет закрыть, а также сохранение данных.

Я столкнулся с this, что является чем-то аналогичным, что я хотел бы сделать для iFrames, это упростило бы преобразование текущих действий.

Заранее благодарен!

ответ

1

Хорошо, я думаю, что получил это. Я сделал вид под названием Close в общей директории и ее содержание:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
<head runat="server"> 
    <title>Close</title> 
</head> 
<body> 
    <div> 
     <script type="text/javascript"> 
      parent.$.fn.fancybox.close(); 
      parent.location.reload(true); 
     </script> 
    </div> 
</body> 
</html> 

И в действии я просто иду return View("Close");. Он закрывает iFrame и обновляет страницу, вызывающую iFrame.

0

Вы можете использовать jquery.post для вызова своего действия из iframe.

затем используйте обратный вызов из метода .post, чтобы скрыть iframe.

$.post('/MyController/MyAction', 
    { param1: $('field1'), param2: $('field2') }, 
    function(data) { 
    if (data) { 
    $("#myIFrame").fadeout(); 
    } 
} 
1

Я думаю, что возвращение Закрыть ActionMethod - ваш лучший выбор. Вы можете вернуть результат JavaScript из ActionMethod, но затем вы определяете, как ваш html/javascript должен действовать в ActionMethod, а не в представлении (что мне особенно не нравится).

Другим решением, которое идентично с вашим является ...

<script type="text/javascript"> 
    if (window.parent != null) 
     window.parent.location = '<%= Url.RouteUrl(new { 
      controller = "YourContoller", 
      action = "YourAction" }) %>'; 
    else 
     window.location = '<%= Url.RouteUrl(new { 
      controller = "YourController", 
      action = "YourAction" }) %>'; 
</script> 

Вы можете специально перенаправить на контроллер/действие, а не просто перезагрузить родительскую страницу. Или, может быть, вы передадите параметр/модель, который определяет, к какому маршруту следует перенаправить.

+0

+1, Правда, это гораздо лучший способ сделать это, но из-за нехватки времени я думаю, что я реализовал метод, который я опубликовал. Поскольку я просто закрываю fancybox iFrames, я только перезаряжаю тот же контроллер и действие, а другие не задействованы. – aredkid

Смежные вопросы