我刚刚完成了我的第一个ASP.NET MVC(2)CMS。下一步是建立一个网站,该网站将显示CMS数据库中的数据。这是网站设计:

http://img56.imageshack.us/img56/4676/portal.gif http://img56.imageshack.us/img56/4676/portal.gif

#1(红色框)-显示文章类别。 ViewModel:

public class CategoriesDisplay
    {
        public CategoriesDisplay() { }

        public int CategoryID { set; get; }
        public string CategoryTitle { set; get; }
    }

#2(棕色框)-显示最近的x篇文章;跳过绿色方框3中的那些。 View 模型:
public class ArticleDisplay
    {
        public ArticleDisplay() { }

        public int CategoryID { set; get; }
        public string CategoryTitle { set; get; }

        public int ArticleID { set; get; }

        public string ArticleTitle { set; get; }
        public string URLArticleTitle { set; get; }
        public DateTime ArticleDate;

        public string ArticleContent { set; get; }

    }

#3(绿色框)-显示最近的x篇文章。使用与棕色盒子#2相同的ViewModel

#4(蓝色框)-显示即将发生的事件的列表。使用dataContext.Model.Event作为ViewModel

#1,#2和#4框将在网站上重复出现,它们是母版页的一部分。因此,我的问题是:将数据从模型传输到Controller并最终传输到View页面的最佳方法是什么?
  • 我应该为它做一个 Controller 吗
    母版页和将所有这些类包装在一起的ViewModel类,或者
  • 我应该为它创建局部 View 吗
    每个这些盒子,使每个
    他们中的人继承了适当的类(Class)
    (如果有可能,
    这样工作吗?)还是
  • 我是否应该将此重复的代码放入
    所有 Controller 和所有其他
    通过ViewData进行数据传输,
    可能是更糟糕的方法:)或
  • 也许还有更好更好的选择
    简单的方法,但我不知道/看不到吗?

  • 提前致谢,
    伊莱

    编辑:
    如果您的答案是#1,请说明如何制作母版页 Controller !

    编辑2:
    在本教程中,描述了如何使用抽象类http://www.asp.net/LEARN/mvc/tutorial-13-cs.aspx将数据传递到母版页
    在“ list 5 – Controllers\MoviesController.cs”中,直接使用LINQ从数据库而不是从存储库检索数据。因此,我想知道这是否只是本教程中的内容,还是这里有一些窍门而不能/不应该使用存储库?

    最佳答案

    要将数据获取到我的母版页:

  • 我不喜欢使用抽象类将数据获取到母版页。我更喜欢组合而不是继承。
  • 我不喜欢使用ViewData字典,因为它不是强类型的。

  • 我将为每个部分创建Views,ViewModels和Actions。然后调用Html.RenderAction(...)例如:

    我将只为redbox创建html的CategoriesDisplay.aspx。我会通过您的CategoriesDisplay模型。然后在我的 Controller 中:
    public class CategoryController : Controller
    {
        public ActionResult DisplayCategories()
        {
          var model = new CategoriesDisplay();
          ...
          return View(model);
        }
    }
    

    然后在我的母版页中:
    <% Html.RenderAction<CategoryController>(c => c.DisplayCategoreis()); %>
    

    这将在母版页中内联显示CategoriesDisplay View 。反过来,您也可以拥有SOC(关注点分离),干净且易于管理的代码。

    关于asp.net-mvc - asp.net mvc2-母版页和代码组织的 Controller ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2568318/

    10-13 06:52