1

Umbraco データベースと同じ SQL Server 上の別のデータベースから価格表を取得する必要がある Web サイトで作業しています。

別のデータベースにある必要があります。

新しい接続文字列を作成し、PricelistEF データベース ファーストを使用しました。

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
      }
4

1 に答える 1