在ASP .NET WebForms中,可以在WebControl页面中创建可从主机页面访问的属性和方法。这在MVC中是否可行?
我想将自定义属性添加到局部视图中,在主视图上渲染它,然后让主视图访问这些属性。我有什么选择?
答案 0 :(得分:1)
我相信ViewBag会在这个
中帮助你您可以使用
设置ViewBag属性ViewBag.MyProperty = "this is a string";
然后在视图的其他部分检索它们。
答案 1 :(得分: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>
答案 2 :(得分:0)
这仅适用于基于事件的系统。控件的状态发生变化,容器需要对这些变化作出反应。
在ASP.NET MVC中的容器主视图 将数据传递给它的部分。如果部分需要更改应用程序的状态,则会将更改发布到控制器操作。然后,控制器操作将更改的模型提供给主视图和包含的部分。