2015-07-20 36 views

回答

1

這個問題可以有很多解決方案。 F.E.您可以使用複雜的主視圖模型,有一個局部視圖模型屬性:

public struct PartialViewModel 
{ 
    public string Foo { get; set; } 

    public int Bar { get ; set; } 
} 

. . . 

public struct MainViewModel 
{ 
    public double Baz { get; set; } 

    public PartialViewModel Qux { get; set; } 
} 

然後你可以在一個動作的代碼構建MainViewModel

public ActionResult SomeAction(int id) 
{ 
    var model = ModelRepostiory.GetById(id); 
    var viewModel = new MainViewModel 
    { 
     Baz = model.Baz, 
     Qux = new PartialViewModel 
     { 
      Foo = model.Partial.Foo, 
      Bar = model.Partial.Bar, 
     }, 
    }; 

    return View(viewModel); 
} 

MainView.cshtml

@model MainViewModel 
. . . 
<div> 
<p>Additional info:</p> 
@Partial("partial", Model.Qux) 
</div> 

PartialView.cshtml

@model PartialViewModel 
<p>Foo: @Model.Foo</p> 
<p>Bar: @Model.Bar</p> 
+0

噢很好,我非常喜歡這種方法。是否有可能從控制器返回主視圖的模型?例如:'var partialViewValue = View.Current.Model.Qux.Foo' –

+0

正如我所看到的,這不可能導致控制器的操作應該返回'ActionResult',即HTML或JavaScript,或類似的東西。 –

+0

也許我不清楚。我是從控制器的意思。用戶點擊主視圖上的一個按鈕,控制器上的一個方法會觸發。在該方法中,我可以確定當前模型而不將其作爲參數傳遞嗎? –

1

相信ViewBag將幫助您在這個

您可以

ViewBag.MyProperty = "this is a string"; 

設置ViewBag的屬性,然後在視圖中的其他部分進行檢索。

0

這隻適用於基於事件的系統。控件的狀態發生變化,容器需要對這些變化做出反應。

在ASP.NET MVC容器主視圖 將數據傳遞給它的部分。如果部分需要更改應用程序的狀態,它會將更改發佈到控制器操作。控制器動作然後將改變的模型提供給主視圖和包含的部分。

相關問題