在ASP .NET WebForms中,可以在可從主機頁面訪問的WebControl頁面中創建屬性和方法。這是可能的MVC?如何訪問視圖(或局部視圖)的自定義屬性?
我想將自定義屬性添加到局部視圖,在主視圖上呈現它,然後讓主視圖訪問這些屬性。我有什麼選擇?
在ASP .NET WebForms中,可以在可從主機頁面訪問的WebControl頁面中創建屬性和方法。這是可能的MVC?如何訪問視圖(或局部視圖)的自定義屬性?
我想將自定義屬性添加到局部視圖,在主視圖上呈現它,然後讓主視圖訪問這些屬性。我有什麼選擇?
這個問題可以有很多解決方案。 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>
相信ViewBag將幫助您在這個
您可以
ViewBag.MyProperty = "this is a string";
設置ViewBag的屬性,然後在視圖中的其他部分進行檢索。
這隻適用於基於事件的系統。控件的狀態發生變化,容器需要對這些變化做出反應。
在ASP.NET MVC容器主視圖 將數據傳遞給它的部分。如果部分需要更改應用程序的狀態,它會將更改發佈到控制器操作。控制器動作然後將改變的模型提供給主視圖和包含的部分。
噢很好,我非常喜歡這種方法。是否有可能從控制器返回主視圖的模型?例如:'var partialViewValue = View.Current.Model.Qux.Foo' –
正如我所看到的,這不可能導致控制器的操作應該返回'ActionResult',即HTML或JavaScript,或類似的東西。 –
也許我不清楚。我是從控制器的意思。用戶點擊主視圖上的一個按鈕,控制器上的一個方法會觸發。在該方法中,我可以確定當前模型而不將其作爲參數傳遞嗎? –