如何通过从另一个页面传入ID来使用Web Matrix查询数据库以获取单个项目?
注意:我正在使用部分页面用于我的UI,这些只是webmatrix中的页面,使用:
@RenderPage("/page_name.cshtml")
我正在尝试从两个表和页面组成<ul>
。具有关联的ServiceFeatures表的Services表。 WebMatrix它通过为ServieFeatures表分配serviceID来获取关系,该表是Services表的ServieId。
所以我有两个页面来呈现<ul>
一个 _ServiceList.cshtml ,其中包含以下内容:
@{
var db = Database.Open("winmodb");
var servicesSql = "SELECT * FROM Services WHERE Featured = 'true'";
var services = db.Query(servicesSql);
}
<div id="service-list">
@foreach(var service in services) {
<h2>@service.Name</h2>
<ul>
@RenderPage("~/shared/_ServiceFeature.cshtml", @serviceId);
</ul>
}
在 _ServiceFeature.cshtml 中,我有以下内容。
@{
var db = Database.Open("database");
var serviceFeatureSql = "SELECT * FROM ServiceFeatures WHERE ServiceId = @0";
var serviceFeature = db.QuerySingle(serviceFeatureSql, serviceId);
}
<li>@serviceFeature.Name</li>
但它不起作用,我不确定是否必须传递变量。 我知道serviceId在当前环境中不存在,这就是我被困住的地方。
答案 0 :(得分:0)
参数在PageData
(非动态)或Page
(动态)属性中传递:
@RenderPage("~/shared/_ServiceFeature.cshtml", new { serviceId });
在部分页面中,您可以编写
db.QuerySingle(serviceFeatureSql, Page.serviceId);
为了按名称访问参数,您需要以匿名类型传递。
答案 1 :(得分:0)
在_ServiceList页面中,您的RenderPage调用应如下所示:
@RenderPage("~/shared/_ServiceFeature.cshtml", service.serviceId)
在_ServiceFeature中,您可以使用Page [0]:
获取serviceId的值db.QuerySingle(serviceFeatureSql, Page[0]);