MVC NET - 在控制器之间保持简单数据

时间:2016-07-01 09:04:21

标签: asp.net asp.net-mvc asp.net-mvc-5

我正在开发一个基于流行的ContosoUniveristy教程的简单项目。我想扩展本教程中的一些功能。

我创建了一个名为School的表格,其中我保留了每个学校的地址,电话号码,课程,学生等属性。后来我添加了一个名为SchoolID的foreignKey属性给学生,课程和其他几个表。

我有带有基本布局视图的SchoolIndex页面,其中列出了所有学校,用户可以单击一个进入详细信息页面。此详细信息页面具有_DitLayout布局,左侧有附加菜单,可以找到指向相应信息的链接,例如联系,课程,学生(如学校表中存储的那些)。 _DitLayout由所有联系人,课程和学生观点共享。

我有一个问题。当我在SchoolIndex页面点击学校时,我希望左侧菜单中的链接指向这个特定的学校属性。要做到这一点,我必须以某种方式将SchoolID传递到布局页面(不是一个好主意?)。另一种方法是在运行槽视图,控制器和操作时以某种方式存储SchoolID。所以在控制器中我可以写

  public class SchoolController : Controller
  {
     private SchoolContext db = new SchoolContext();

     public ActionResult Contact()
     {

        int ID  = //here I pass SchoolID;

        // I fetch school from the database
        SchoolModel school = db.School.Find(ID);

        //and I map the properties to the ViewModel
        ContactViewModel contact = new ContactViewModel();
        contact.Address = school.Address;
        contact.Phone = school.Phone;
        //etc.

        return View(contact);
     }
   }

问题是:如何在控制器之间传递或存储SchoolID?是的我不仅需要在动作之间传递ID,还需要在控制器之间传递ID。

我想也许我可以将这个ID存储在cookie中。这是个好主意吗?有没有更好的方法呢?

2 个答案:

答案 0 :(得分:0)

如果您想存储数据而不将其保留在URL(或HTTP请求)中,则必须将其保存在Session或Cookie中。

我个人会修改MVC路由以包含学校ID。

例如:/{schoolId}/{controller}/{action}

这样,无论控制器如何,schoolId都可以在任何操作中使用。

答案 1 :(得分:0)

您可以使用Session对象或TempData在控制器之间传递数据。

->JunitTest
-->.classpath
-->lib
---->hamcrest-core-1.3.jar
---->junit-4.12.jar
-->src
---->sommeClass 
-------->Somme.java (class to test)
---->TestSommeClass
-------->SommeTest.java (class test)