<% object parentModel = ViewContext.ParentActionViewContext.ViewData.Model; %>
我有一个“网关”表和一个“传感器”表。网关可以拥有多个传感器。这两个表之间的关联是一对多(网关到传感器),传感器表有一个“gatewayid”字段,用于将传感器与网关相关联。
我正在使用实体框架,有一个网关存储库类、一个网关控制器类、一个网关部分伙伴类来处理数据注释,以及一个索引视图,列出网关并提供经典的crud页面。
在网关列表上,我添加了一个操作链接,以列出与给定网关相关联的传感器。
到目前为止都很好(我希望如此)。
我假设现在应该为我的传感器表创建相同的设置:存储库、控制器、伙伴类等。
问题1:列出给定网关(父记录)的所有传感器(子记录)的MVC方法是什么?
在每个网关行项目中,我生成了一个链接,看起来像这样:
localhost/sensor/list/5
这意味着列表应仅显示当前网关的传感器。
我认为这不是正确的方法。我认为我应该在后台传递一个网关模型,以便每次发出这样的链接时:
localhost/sensor/
它只需要理解当前网关的上下文。
Q2:接下来的问题是如何为传感器创建操作做同样的事情。我可以设置创建控制器并弹出视图表单,但如何指示传感器应与哪个网关相关联?
在SensorController类顶部:
SensorRepository repository = new SensorRepository();
GatewayRepository Grepository = new GatewayRepository();
我的传感器列表ActionResult方法如下:
public ActionResult List(int id)
{
Gateway gateway = Grepository.GetGateway(id);
var sensors = repository.FindGatewaySensors(id);
return View(sensors);
}
我的传感器 Create ActionResult 方法如下(请注意,我在将其传递给视图之前设置了 gatewayid 值;它在视图表单中不可编辑):
// GET: /Sensor/Create
public ActionResult Create(int id)
{
Sensor sensor = new Sensor();
sensor.gatewayid = id;
return View(sensor);
}
这是Create ActionResult的post方法:
[HttpPost]
public ActionResult Create(FormCollection collection)
{
Sensor sensor = new Sensor();
if (TryUpdateModel(sensor))
{
repository.Add(sensor);
repository.Save();
return RedirectToAction("List", new { id = sensor.gatewayid });
}
return View(sensor);
}
但这似乎不太对。我敢打赌我错过了一个简单的方法。请启发我。