モジュール式のWebサイトを作りたい.すべてうまくいっているが、モジュールを累積的に追加するときに問題が発生した.以下のようにコンテンツを動的にロードしたい:
お問い合わせページ:
- Content.cshtml : Lorem ipsum dolor
- Contact.cshtml
- Content.cshtml : アドレス: トビリシ/ジョージア
ただし、以下のように最初のコンテンツのみを正しくロードします
- Content.cshtml : Lorem ipsum dolor
- Contact.cshtml
- Content.cshtml : Lorem ipsum dolor
どうすればこの問題を解決できますか?
tblモジュール
+---------+-------------------------+
| ModulId | PhysicalPath |
+---------+-------------------------+
| 1 | /Content.cshtml |
+---------+-------------------------+
| 2 | /Contact.cshtml |
+---------+-------------------------+
tblPage
+---------+-------------------------+
| PageId | Page |
+---------+-------------------------+
| 1 | About |
+---------+-------------------------+
| 2 | Contact |
+---------+-------------------------+
tblContent
+------------+----------------------------+
| ContentId | Content |
+------------+----------------------------+
| 1 | Lorem ipsun dolor... |
+------------+----------------------------+
| 2 | Adress : Tbilisi/Georgia |
+------------+----------------------------+
tblPageModules
+---------+-------------+-------------+
| PageId | ModuleId | OrderId |
+---------+-------------+-------------+
| 2 | 1 | 1 |
+---------+-------------+-------------+
| 2 | 2 | 2 |
+---------+-------------+-------------+
| 2 | 1 | 3 |
+---------+-------------+-------------+
ModuleRepository.cs
public class ModuleRepository
{
public IEnumerable<Modules> Module { get; set; }
public IEnumerable<PageModules> PageModule { get; set; }
public ContentBlock Content { get; set; }
}
コントローラ
public ActionResult Page()
{
int PageId = default(int);
if (RouteData.Values["id"] != null)
{
PageId = int.Parse(RouteData.Values["id"].ToString());
}
using (ContentModel db = new ContentModel())
{
var module = from n in db.PageModule
join m in db.Module on n.ModuleId equals m.ModuleId
where n.PageId == PageId
orderby n.OrderId
select m;
var model = new ModuleRepository
{
Module = ViewName.ToList(),
Content = db.ContentBlock.Where(n => n.PageId == PageId).First()
};
return View(model);
}
}
Page.cshtml
@model ModuleRepository
@foreach (var modul in Model.Module)
{
@Html.Partial(@modul.PhysicalPath, Model)
}
Content.cshtml
@model ModuleRepository
@Html.Raw(@Model.Content.Content)