2015-09-04 238 views
0

我已經閱讀了關於如何更新局部視圖的一些教程,但他們都假設用戶交互作爲起點(如下拉更改將導致部分視圖中的某些數據更新) 。我的情況有所不同:我試圖從控制器開始更新局部視圖,而無需用戶在UI上進行交互。如果我使用這樣的代碼:從控制器更新部分視圖

[HttpPost] 
    public ActionResult PerformAction(MyModel mymodel) 
    { 
     //....do things 

     return PartialView("Notification", mymodel); 
    } 

瀏覽器將只顯示局部視圖。建議?由於

以下是主要觀點:

@using System.Web.UI.WebControls 
@model MyApplication.Models.Mymodel 

@{ 
    ViewBag.Title = "Home Page"; 
} 

<form class="float_left" method="post" action="@Url.Action("Start", "Home")"> 
    <fieldset> 
     @Html.TextBoxFor(m => m.Username, new { Value = Model.Message }) 
     <input type="submit" value="Subscribe"/> 
     <div id="notificationMessage"> 
      @{ Html.RenderPartial("~/Views/Home/PartialView.cshtml", new PartialViewModel()); } 
     </div> 
    </fieldset> 
</form> 

,這裏的部分:

@using System.Web.UI.WebControls 
@model HostedExchangeListener.Models.PartialViewModel 
@Html.TextBoxFor(m => m.Message, new { Value = Model.Message }) 
+0

因爲您的東西的聲音好像你要使用AJAX呈現局部視圖返回'PartialView'?所以它不會重新加載頁面 –

+0

在教程中,我看到使用了Ajax,但它假定頁面上有一些用戶交互。 – user1472131

+0

那麼有幾種方法,您可以在DOM加載時在部分視圖中加載時使用ajax,或者您可以將模型傳遞給部分視圖。你可以發佈你的視圖,你想渲染的部分,也是你的部分。 –

回答

0

你需要做的是沿着這些路線的東西:

查看

<div id="partialViewContent"> </div> 

<script> 
$(function() // Once the DOM is loaded 
{ 
    setInterval(function(){ 
     $.get('@Url.Action("Action","Controller")', function(data) { 
     $('#partialViewContent').html(data); // Replace whats in the div with the PartialView 
    }, 5000); // Every 5 seconds 
}); 

</script> 

控制器

public ActionResult Action() 
{ 
    var mymodel = new MyViewModel(); 
    //....do things 
    return PartialView("Notification", mymodel); 
} 
+0

該解決方案並不能滿足我的需求。如果我理解正確它會每5秒鐘發一次我的行爲,所以這是決定要求更新的ui。我的問題是,如果控制器可以決定更新局部視圖。 (我的控制器監聽外部服務,當他收到消息時需要更新局部視圖) – user1472131

+0

您將需要類似SignalR的東西來更新視圖。真的這個信息應該在你的問題。要將更新從控制器推出到視圖,您可能需要對當前實現進行一些修改。 –

相關問題