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

C# 如何访问视图(或局部视图)的自定义属性?,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,在ASP.NETWebForms中,可以在可从主机页访问的WebControl页面中创建属性和方法。这在MVC中可能吗 我想向局部视图添加自定义属性,在主视图上渲染它,然后让主视图访问这些属性。我的选择是什么?我相信ViewBag会在这方面帮助您 可以使用设置ViewBag属性 ViewBag.MyProperty = "this is a string"; 然后在视图的其他部分检索它们。这个问题有很多解决方案。F.e.您可以使用具有局部视图模型属性的复杂主视图模型: public struc

在ASP.NETWebForms中,可以在可从主机页访问的WebControl页面中创建属性和方法。这在MVC中可能吗


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

我相信ViewBag会在这方面帮助您

可以使用设置ViewBag属性

ViewBag.MyProperty = "this is a string";

然后在视图的其他部分检索它们。

这个问题有很多解决方案。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

PartialView.cshtml


这仅在基于事件的系统中才有意义。控件的状态发生变化,容器需要对这些变化做出反应

在ASP.NET MVC中,容器主视图
将数据传递给其分区。如果部分需要更改应用程序的状态,它会将更改发布到控制器操作。然后,控制器操作将更改的模型提供给主视图和包含的部分。

哦,很好,我非常喜欢这种方法。是否可以从控制器返回主视图的模型?比如:var partialViewValue=View.Current.Model.Qux.foo正如我所看到的,控制器的操作不可能返回ActionResult,也就是HTML或JavaScript之类的。也许我不清楚。我是说从控制员那里。用户单击主视图上的按钮,就会触发控制器上的方法。在该方法中,我可以确定当前模型而不将其作为参数传递吗?您的问题在HTTP中没有简单的解决方案,因为HTTP是无状态的。您可以将最后加载的模型存储在中,然后从会话而不是数据库中读取此模型。
@model MainViewModel
. . .
<div>
<p>Additional info:</p>
@Partial("partial", Model.Qux)
</div>
@model PartialViewModel
<p>Foo: @Model.Foo</p>
<p>Bar: @Model.Bar</p>