在不同的控制器之间共享视图(使用 Views / Shared 文件夹)是个好主意吗?
我正在创建我的第一个MVC应用程序,它需要一些部分彼此相似的数据。他们“解释”了不同的东西(因此将存储在不同的表格中)但每个都有Id
,Name
和Status
。因此,我可以使用不同的控制器,然后使用相同的视图在下拉列表中显示数据,允许用户选择一个来编辑或通过文本框添加新的数据。
显然我失去了强类型ViewPage数据的能力,但除此之外,这会被认为是一种很好的方法吗?或者我最好为每个控制器创建一个View来使用?
答案 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必须包含列信息以及数据,以及有关任何链接的一些信息。
细节并不困难,如果有很多类似的页面会节省时间。