2009-09-03 52 views
72

我對web應用程序開發非常陌生,我認爲我會從最近的技術開始,所以我試圖一次性學習asp.net以及MVC框架。對於你來說,這可能是一個非常簡單的問題,MVC專業人員。asp.net MVC部分視圖控制器操作

我的問題是部分視圖應該有關聯的動作,如果是的話,只要正常頁面在局部視圖上使用RenderPartial()就會調用此動作?

回答

130

儘管可以有返回部分視圖的操作,但不需要操作來呈現局部視圖。 RenderPartial使用部分視圖並使用給定的模型和視圖數據(如果提供)將其呈現在當前(父視圖)中。

如果您使用AJAX加載/重新加載頁面的一部分,您可能需要一個返回部分視圖的操作。在這種情況下,由於您只想重新加載部分頁面,因此不需要返回完整視圖。在這種情況下,您可以讓該操作返回與該頁面的該部分對應的部分視圖。

標準機構

利用局部視圖的普通視圖中(無操作需要)

...some html... 
<% Html.RenderPartial("Partial", Model.PartialModel); %> 
...more html.. 

Ajax的機構

通過AJAX重新加載頁面的一部分(注部分在初始頁面加載時呈現內聯)

...some html... 
<div id="partial"> 
<% Html.RenderPartial("Partial", Model.PartialModel); %> 
</div> 
...more html... 

<script type="text/javascript"> 
    $(function() { 
     $('#someButton').click(function() { 
      $.ajax({ 
       url: '/controller/action', 
       data: ...some data for action..., 
       dataType: 'html', 
       success: function(data) { 
       $('#partial').html(data); 
       }, 
       ... 
      }); 
     }); 
    }); 
</script> 

控制器AJAX

public ActionResult Action(...) 
{ 
    var model = ... 

    ... 

    if (Request.IsAjaxRequest()) 
    { 
      return PartialView("Partial", model.PartialModel); 
    } 
    else 
    { 
      return View(model); 
    } 
} 
+0

我明白了,我只是玩MVC應用程序的VS模板。我試圖在部分視圖中顯示多個客戶列表。我目前有一個數據傳輸模型類,如何將此模型發送到部分視圖而不涉及呈現此部分視圖的頁面視圖? 感謝您的幫助! – yogibear 2009-09-03 01:51:07

+1

部分總是包含在主視圖中。如果您是通過AJAX進行更新的,那麼您只能自行返回部分內容。大概你會用部分來顯示客戶端列表。您可能會在視圖中使用foreach循環遍歷列表(包含在視圖模型中),並將每個列表傳遞給部分模型。 – tvanfosson 2009-09-03 01:54:13

+0

+1非常好!很好的答案。 – 2009-09-03 01:56:19

3

接受的答案是完全正確的,但我想補充一點,你可以使用jQuery負荷加載你的部分觀點。如果您不想考慮併發性,則需要更少的配置。

$("#Your-Container").load("/controller/action/id"); 
+1

一個建議是使用Url.Action,因爲像這樣對路徑進行硬編碼會在路由更改或地圖結構更改時中斷應用程序。 – 2016-10-21 14:26:55

+0

完全同意你@JpHouten。 – Saeid 2016-10-21 14:51:09

0

答案是否定的。但是有時你需要在局部視圖後面採取一些控制器操作。然後你可以創建一個actionMethod來返回一個局部視圖。這actionMethod可以在另一個視圖中被稱爲:

@Html.Action("StockWarningsPartial", "Stores") 

的actionmethod可以關注一下:

public ActionResult StockWarningsPartial() 
{ 
     ....    
     return View("StockWarningsPartial", warnings); 

} 

和視圖 'StockWarningsPartial.cshtml' 打頭:

@{ 
    Layout = null; 
} 

使它不要再次渲染你的周圍佈局。

1

我能夠用這個邏輯實現類似的東西。

內.cshtml

@Html.Action("ActionMethodName", "ControllerName"); 

內的控制器

[Route("some-action")] 
public ActionResult ActionMethodName() 
{ 
    var someModel = new SomeModel(); 
    ... 
    return PartialView("SomeView.cshtml", someModel); 
} 

就是這樣。

如果您需要將.cshtml中的值傳遞給操作方法,那麼這是可能的。

+1

完美的例子。你在控制器和視圖中以乾淨清晰的方式展示了交互和代碼。除了絨毛。謝謝。 – eaglei22 2017-10-10 21:37:33

相關問題