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

一旦有人嘗試通過網址直接訪問,您可以重定向到主視圖。查看我在答案中添加的示例。 –