如何访问视图(或部分视图)的自定义属性?

时间:2015-07-20 09:37:23

标签: c# asp.net asp.net-mvc asp.net-mvc-4

在ASP .NET WebForms中,可以在WebControl页面中创建可从主机页面访问的属性和方法。这在MVC中是否可行?

我想将自定义属性添加到局部视图中,在主视图上渲染它,然后让主视图访问这些属性。我有什么选择?

3 个答案:

答案 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中的容器主视图  将数据传递给它的部分。如果部分需要更改应用程序的状态,则会将更改发布到控制器操作。然后,控制器操作将更改的模型提供给主视图和包含的部分。