我正在开发一个基于流行的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中。这是个好主意吗?有没有更好的方法呢?
答案 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)