2016-11-23 2 views
0

Verwenden von Basis-DAL 2 zum Abrufen von Daten aus einer Tabelle mit Tabid. Möchte auch die Tab Url durch die DNN API erhalten. Ich könnte mich dem Tabs-Tisch anschließen, möchte aber mit der API arbeiten.DNN DAL 2 Hydratobjekt und andere

Hier ist mein Modell.

[TableName("My_Products")] 
 
    [PrimaryKey("ProductId")] 
 
    [Cacheable("My_Products_", CacheItemPriority.Normal, 20)] 
 

 
    public class ProductInfo  
 
    { 
 
     public ProductInfo() 
 
     { 
 
      Langs = new List<ProductLangInfo>(); 
 
     } 
 
     public int ProductId { get; set; } 
 
     [ReadOnlyColumn] 
 
     public string ProductImage { get; set; } 
 
     public int LineID { get; set; } 
 
     [ReadOnlyColumn] 
 
     public string Culture { get; set; } 
 
     [ReadOnlyColumn] 
 
     public string ProductName { get; set; } 
 
     [ReadOnlyColumn] 
 
     public string ProductShortDesc { get; set; } 
 
     [ReadOnlyColumn] 
 
     public int TabId { get; set; } 
 
     [ReadOnlyColumn] 
 
     public string ProductURL { get; set; } //GET THIS FROM API 
 
     [ReadOnlyColumn] 
 
     public List<ProductLangInfo> Langs { get; set; } 
 
    }

Das ist mein Controller-

public IEnumerable<ProductInfo> GetProducts(string language) 
 
     { 
 
      using (IDataContext ctx = DataContext.Instance()) 
 
      { 
 
       string sqlCmd = ";WITH cte as (SELECT * FROM [ProductsLang] WHERE Culture = @0)" + 
 
           " SELECT Products.*,cte.ProductName, cte.ProductShortDesc, cte.TabId" + 
 
           " FROM [Products] as Products" + 
 
           " INNER JOIN cte ON Products.ProductId = cte.ProductId"; 
 

 
       string order = " ORDER BY Products.ProductId DESC"; 
 
       return ctx.ExecuteQuery<ProductInfo>(CommandType.Text, sqlCmd + order, language); 
 
      } 
 
     }

Ich denke, meine Frage ist, wo der beste Weg, in der tabid von meiner Anfrage an die zu übergeben ist DNN API?

Antwort

0

Dies sollte ziemlich einfach, die NavigateURL Methode off DotNetNuke.Common.Globals

var url = DotNetNuke.Common.Globals.NavigateURL(TabId); 

Es gibt auch andere Möglichkeiten, um URLs in DNN verwenden, aber das ist der einfachste Weg, die alle verschiedenen Provider respektieren soll, dass kann verwendet werden, um eine URL aufzubauen

private string _productUrl = ''; 
public string ProductURL { get return DotnetNuke.Common.Globals.NavigateURL(TabId); } 
+0

Also sollte ich dies außerhalb meines Modells und Controller tun und dies vom Front-End anrufen? Mein Modul ist ein eckiges Spa-Modul, also würde ich einen Webapi-Service erstellen, um das zurückzugeben? – nextoneup

+0

könnten Sie es in die Eigenschaft selbst setzen? Also, dass der Aufruf, die URL zu "holen", diesen API-Aufruf in die Population des Objekts bringt? Ein paar Infos zu der Antwort hinzugefügt, das ist noch nicht getestet –

+0

Ich dachte, das würde auch funktionieren, aber es kommt wieder als null. ' öffentliche Klasse ProductLangInfo { public int? ProdukteId {bekommen; einstellen; } öffentliche Zeichenfolge ProductName {get; einstellen; } öffentliche Zeichenfolge ProductShortDesc {get; einstellen; } public int TabId {erhalten; einstellen; } private Zeichenfolge _productUrl; öffentliche Zeichenkette ProductURL { erhalten { zurück DotNetNuke.Common.Globals.NavigateURL (TabId); } } } ' – nextoneup