Umbraco データベースと同じ SQL Server 上の別のデータベースから価格表を取得する必要がある Web サイトで作業しています。
別のデータベースにある必要があります。
新しい接続文字列を作成し、Pricelist
EF データベース ファーストを使用しました。
PriceList
リポジトリ:
namespace UmbracoCMS.Repository{
using System;
using System.Collections.Generic;
public partial class Prisliste
{
public string Kode { get; set; }
public string Speciale { get; set; }
public string Ydelsesgruppe { get; set; }
public string Gruppe { get; set; }
public string Ydelse { get; set; }
public string Ydelsestekst { get; set; }
public string Anaestesi { get; set; }
public string Indlæggelse { get; set; }
public Nullable<double> Listepris { get; set; }
public Nullable<int> WebSort { get; set; }
public string YdelsesTekstDK { get; set; }
public string Frapris { get; set; }
public Nullable<int> Sortering { get; set; }
}
}
PriceListController
クラス:
using System;
using System.Linq;
using System.Web.Mvc;
using UmbracoCMS.Repository;
namespace UmbracoCMS.Controllers{
public class PriceListController : Umbraco.Web.Mvc.SurfaceController {
[HttpGet]
public PartialViewResult GetPriceList(string contentTitle){
var db = new PricelistContext();
var query = from b in db.Prislistes orderby b.Speciale select b;
Console.WriteLine("records in the database:");
foreach (var item in query)
{
Console.WriteLine(item.Speciale);
}
return PartialView("~/views/partials/PriceList.cshtml");
}
}
}
私が望むのは、ドキュメント タイプのプロパティに基づいて、治療の価格をロードすることです。私はかなり新しいumbracoであるため、umbracoでこれを行う方法がわかりません。
ContentTitle
そのため、治療ページが要求されたときは、プロパティ値を取得する必要があります。これを使用して、同じレコードをすべて取得し、Speciale
それらをリスト/テーブルに表示します。
クエリで
.where(b.Speciale = contentTitle)
誰かが少し助けてくれたり、私を正しい方向に導いてくれたら最高です.
また、同じhttpリクエストでそれを行うことは可能ですか? または、部分ビューまたはマクロを使用して、ユーザーが処理ページに移動したときに、umbraco データベースからドキュメント タイプのプロパティを取得すると同時に、pricelist データベースからレコードを取得する必要がありますか?
または、これを行うより良い方法はありますか?
アップデート:
Ryios さん、すばらしい回答をありがとうございます。
さらに質問を受けました。
using System;
using System.Linq;
using System.Web.Mvc;
namespace UmbracoCMS.Controllers
{
public class PriceListSurfaceController : Umbraco.Web.Mvc.SurfaceController
{
public ActionResult GetPriceList(string contentTitle)
{
PricelistContext.RunInContext(db =>
{
var result = db.Prislistes.OrderBy(p => p.Speciale);
});
return View(result);
}
}
}
動作するようになったので、メソッドを呼び出し、Pricelist データベースのデータを次のように表示します。
var result = db.Prislistes.OrderBy(p => p.Speciale);
ここで、価格のリストを再びビューに表示するだけでよいので、価格のリストまたは表を表示できます。
Umbraco でこれを行う方法について提案はありますか。通常、MVC で ViewModel を次のように返します。
return View(new ListViewModel(result));
次のようなビューで使用します。
@model Project.ViewModels.ListViewModel
だから私はそれをループすることができます。
しかし、「Home」/「TreatmentPage」ドキュメント タイプのプロパティを引き続き保持したいと考えています。
私は partialView でそれを行うべきですか、それとももっと良い方法がありますか?
解決済み
他の誰かが同じような状況にある場合は、共有したいと思いました。
コントローラ:
namespace UmbracoCMS.Controllers
{
public class PriceListSurfaceController : Umbraco.Web.Mvc.SurfaceController
{
public PartialViewResult PriceList(string contentTitle)
{
List<Prisliste> result = null;
PricelistContext.RunInContext(db =>
{
result = db.Prislistes.Where(p => p.Speciale == contentTitle)
.OrderBy(p => p.Speciale).ToList();
});
var model = result.Select( pl => new PrislistVm()
{
Speciale = pl.Speciale,
Listepris= pl.Listepris
});
return PartialView(model);
}
}
}
ビューモデル:
namespace UmbracoCMS.ViewModels
{
public class PrislistVm
{
public PrislistVm()
{
Results = new List<Prisliste>();
}
public List<Prisliste> Results { get; set; }
public string Speciale { get; set; }
public double listepris { get; set; }
}
}
表示/価格表表面:
@model IEnumerable<UmbracoCMS.ViewModels.PrislistVm>
@{
ViewBag.Title = "PriceList";
}
<h2>PriceList</h2>
@foreach (var item in Model)
{
@item.Speciale
@item.Listepris
}