1

想象一下具有局部视图的以下架构。避免局部视图刷新全屏

有时候,当我们在这里就不解释了原因应用程序时出现错误,则局部视图刷新全屏显示。 另外,如果您复制/粘贴分部视图的网址,它会以全屏模式加载。

我们正在努力寻找一个解决方案,其中,加载的局部视图的URL时,它会正确加载完整的上下文,并显示在自己的上下文中的局部视图。 Windows Azure设法做到这一点(http://manage.windowsazure.com),我们愿意模仿这个功能。

我们尝试了一些网络上搜索包含“刷新正确的上下文部分”,“全屏刷新问题局部视图”等关键字...但我们还没找到一种方法来正确地实现这一目标。

有没有任何框架或解决方案来做到这一点?你对此有什么想法?

Partial View

+0

您目前如何刷新局部视图;通过AJAX请求? –

+0

$('。menuLink')。click(function(){$('#configurationpanel')。load(this.href); return false;} – CloudAnywhere

回答

1

如果您正在使用部分景色其明显AJAX参与,你必须做的是,通过AJAX做局部视图的事情。

例如:

如果你有内部部分的形式,你需要它Ajax.BeginForm,而不是Html.BeginForm还有一件事是,jquery.unobtrusive阿贾克斯文件在你的主人布局,使事情工作。

同样是必须通过AJAX,如果你使用的是局部视图,这样你就不会失去上下文中处理事情其他事情的情况。

我希望它有帮助。

0

如果你想避免完全刷新,你将不得不使用ajax并替换id内的内容。如果这就是你打算做的事情,这应该是一件容易的事情。

你应该真的只需要将局部视图url传递给jQuery.get例如。 jQuery.get

我希望这是你在找什么。

+0

嗨安德烈亚斯和@ehsan,请参阅以上评论adress to ashwini – CloudAnywhere

+0

what ashwini描述的是我在说的,你是否可以在你的局部视图中声明一个布局?他打印的内容应该是完全按照你想要发生的事情做的事情 – Dbl

+0

我会尝试,但是假设我有一个主页面http:// myapp/main)和部分视图http:// myapp/home/GetPartialview。如果我在导航器中键入http:// myapp/home/GetPartialview,则在样例中看不到任何代码@Ashwini会发现它必须首先加载容器页面(http:// myapp/main)哪一个会调用http:// myapp/home/GetPartialview – CloudAnywhere

0

部分视图旨在用于可重复使用的视图,将在整个网站的许多地方使用。

我觉得这非常有用,如果我们通过ajax加载它。

以下是示例。这也将避免全屏刷新

_layout。CSHTML(或任何视图网页,其中将加载部分页面)

<div> 
    <h2>This is Partial View content</h2> 
    <div id="content"></div> 
</div> 

<script> 
    $(function() { 
     $("#content").html("Loading..."); 
     setTimeout(function() { LoadPartialView(); }, 5000); 
    }); 
    function LoadPartialView() { 
     $.ajax({ 
      type: "GET", 
      url: '@Url.Action("GetPartialView", "Home")', 
      dataType: "html", 
      success: function (data) { 
       $("#content").empty(); 
       $("#content").html(data); 
       $("#content").fadeIn('slow'); 
      }, 
      error: function (data) { 
       $("#content").empty(); 
      } 
     }); 
    }; 
</script> 

模型

public class TestModel 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Address { get; set; } 
} 

控制器的动作

[HttpPost] 
    public PartialViewResult GetPartialView() 
    { 
     TestModel model = new TestModel(); 

     model.Name="SomeName"; 
     model.Address="Somewhere"; 
     model.Age=25; 

     return PartialView("_PartialTestPage", model); 
    } 

修订

为避免对部分视图进行硬编码访问,请使用将重定向到主视图的重载操作方法。像这样的东西。

[HttpGet] 
    [ActionName("MyOverloadedName")] 
    public ActionResult GetPartialView() 
    { 
     return RedirectToAction("Index", "Home"); //redirect to the main view 
    } 

通过设置HttpGet/HttpPost,可以制作两个不同的同名动作方法。 看看这里更多的替代解决方案Can you overload controller methods in ASP.NET MVC?

+0

是的,但如果您在导航器中键入分部视图的URL(例如http://www.mycompany.com/home/GetPartialView),它将全屏加载。我们想要实现的(以及Windows Azure已经实现的)是加载主页面,然后在相关的div ID中加载局部视图。 – CloudAnywhere

+0

为了进一步阐明预期结果:如果我在浏览器栏中输入http://testpage.com/controller/bananas或http://testpage.com/controller/Apples,其中/ controller/bananas和/ controller/Apples是partialview ,我希望结果是张贴在我的问题中的图片。我相信你的回答不会神奇地加载包含div id =“content”的父容器页面。 – CloudAnywhere

+0

一旦有人尝试通过网址直接访问,您可以重定向到主视图。查看我在答案中添加的示例。 –