在不同控制器之间共享视图

时间:2008-12-09 03:49:41

标签: asp.net-mvc

在不同的控制器之间共享视图(使用 Views / Shared 文件夹)是个好主意吗?

我正在创建我的第一个MVC应用程序,它需要一些部分彼此相似的数据。他们“解释”了不同的东西(因此将存储在不同的表格中)但每个都有IdNameStatus。因此,我可以使用不同的控制器,然后使用相同的视图在下拉列表中显示数据,允许用户选择一个来编辑或通过文本框添加新的数据。

显然我失去了强类型ViewPage数据的能力,但除此之外,这会被认为是一种很好的方法吗?或者我最好为每个控制器创建一个View来使用?

4 个答案:

答案 0 :(得分:1)

就个人而言,如果视图足够通用以用于多个场景,那么我会这样使用它。 DRY!

答案 1 :(得分:1)

如果您创建自己的中间类来处理视图数据,您仍然可以在此场景中使用强类型的ViewPage。

为视图页面定义自定义类:

public class MyCustomViewData
{
    public int Id {get; set;}
    public string Name {get; set;}
    public int Status {get; set;}
}

来自您的信息页:

<% Html.RenderPartial("MyCustomView", new MyCustomViewData ()
{
    Id = ViewData.Model.SomeIdField,
    Name = ViewData.Model.SomeNameField,
    Status = ViewData.Model.SomeStatusField
});

或来自控制器

public ActionResult Foo()
{
    // get your model data

    return View("MyCustomView", new MyCustomViewData ()
    {
        Id = model.SomeIdField,
        Name = model.SomeNameField,
        Status = model.SomeStatusField
    });
}

答案 2 :(得分:1)

通过我们的项目,我们将大多数视图与控制器隔离开来,并且不会重复使用其中的许多视图,但我们会使用大量用户控件和部分视图,这样我们就不会重复自己了。这可以让我们保持所有强类型,也许它可能适合你的场景?

答案 3 :(得分:0)

如果您有一个通用页面格式,比如一个表格,那么您可以在共享文件夹中创建一个通用视图。此ViewData必须包含列信息以及数据,以及有关任何链接的一些信息。

细节并不困难,如果有很多类似的页面会节省时间。