Hej,
Försöker fylla en dropdownlista med de språk som finns tillgängliga i en DNN Portal.
Såhär har jag gjort:
<%@ Import namespace="DotNetNuke"%>
<%@ Import namespace="DotNetNuke.Common"%>
<%@ Import namespace="DotNetNuke.Common.Utilities"%>
<%@ Import namespace="DotNetNuke.UI.Utilities"%>
...
<script runat="server">
void Page_Load(System.Object sender, System.EventArgs e)
{
[b][red]ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys;[/red][/b]
ddlFeedLanguage.DataBind();
}
</script>
...
<asp:DropDownList ID="ddlFeedLanguage" runat="server" Visible="False" AutoPostBack="true"></asp:DropDownList>
Men jag får felet:
'DotNetNuke.Services.Localization.Localization.GetEnabledLocales()'+is+a+'method'%2c+which+is+not+valid+in+the+given+context
Vad har jag gjort för fel? Har ett fungerande exempel i VB.NET som ser ut såhär:
With ddlFeedLanguage
.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys
.DataBind()
.Items.Insert(0, New ListItem("-All-"))
End With
...
<asp:DropDownList ID="ddlFeedLanguage" runat="server" Visible="False" AutoPostBack="true"></asp:DropDownList>
Jag ska försöka åstadkomma samma sak i C# nu, men förstår inte vad jag gör för fel.
Tack,
NETworkMedlem sedan juni 20011 732 inlägg Är GetEnabledLocales en metod? Vad returnerar den? Prova detta:
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys
eller
[Type] Locales = DotNetNuke.Services.Localization.Localization.GetEnabledLocales();
ddlFeedLanguage.DataSource = Locales.Keys
johaseoMedlem sedan maj 2009250 inlägg Den här koden fungerar utmärkt ... men den är i VB.net förstås ;)
Imports System.Web.UI
Imports System.Collections.Generic
Imports System.Reflection
Imports DotNetNuke
Imports DotNetNuke.Services.Exceptions
Imports DotNetNuke.Services.Localization
Namespace ITansvar.Modules.TestModule
''' -----------------------------------------------------------------------------
''' <summary>
''' The ViewTestModule class displays the content
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' </history>
''' -----------------------------------------------------------------------------
Partial Class ViewTestModule
Inherits Entities.Modules.PortalModuleBase
Implements Entities.Modules.IActionable
#Region "Event Handlers"
''' -----------------------------------------------------------------------------
''' <summary>
''' Page_Load runs when the control is loaded
''' </summary>
''' <remarks>
''' </remarks>
''' <history>
''' </history>
''' -----------------------------------------------------------------------------
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
Dim objTestModules As New TestModuleController
Dim colTestModules As List(Of TestModuleInfo)
' get the content from the TestModule table
colTestModules = objTestModules.GetTestModules(ModuleId)
If colTestModules.Count = 0 Then
' add the content to the TestModule table
Dim objTestModule As TestModuleInfo = New TestModuleInfo
objTestModule.ModuleId = ModuleId
objTestModule.Content = Localization.GetString("DefaultContent", LocalResourceFile)
objTestModule.CreatedByUser = Me.UserId
objTestModules.AddTestModule(objTestModule)
' get the content from the TestModule table
colTestModules = objTestModules.GetTestModules(ModuleId)
End If
' bind the content to the repeater
lstContent.DataSource = colTestModules
lstContent.DataBind()
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys
ddlFeedLanguage.DataBind()
' ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales.Keys;
'ddlFeedLanguage.DataBind();
Catch exc As Exception 'Module failed to load
ProcessModuleLoadException(Me, exc)
End Try
End Sub
Protected Sub lstContent_ItemDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DataListItemEventArgs) Handles lstContent.ItemDataBound
Dim strContent As String = ""
' add content to template
If CType(Settings("template"), String) <> "" Then
strContent = CType(Settings("template"), String)
Dim objProperties As ArrayList = Common.Utilities.CBO.GetPropertyInfo(GetType(TestModuleInfo))
Dim intProperty As Integer
Dim objPropertyInfo As PropertyInfo
For intProperty = 0 To objProperties.Count - 1
objPropertyInfo = CType(objProperties(intProperty), PropertyInfo)
strContent = strContent.Replace("[" & objPropertyInfo.Name.ToUpper & "]", DataBinder.Eval(e.Item.DataItem, objPropertyInfo.Name).ToString())
Next intProperty
Else
strContent = DataBinder.Eval(e.Item.DataItem, "Content")
End If
' assign the content
Dim lblContent As Label = CType(e.Item.FindControl("lblContent"), Label)
lblContent.Text = strContent
End Sub
#End Region
#Region "Optional Interfaces"
''' -----------------------------------------------------------------------------
''' <summary>
''' Registers the module actions required for interfacing with the portal framework
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
''' <history>
''' </history>
''' -----------------------------------------------------------------------------
Public ReadOnly Property ModuleActions() As Entities.Modules.Actions.ModuleActionCollection Implements Entities.Modules.IActionable.ModuleActions
Get
Dim Actions As New Entities.Modules.Actions.ModuleActionCollection
Actions.Add(GetNextActionID, Localization.GetString(Entities.Modules.Actions.ModuleActionType.AddContent, LocalResourceFile), Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl(), False, Security.SecurityAccessLevel.Edit, True, False)
Return Actions
End Get
End Property
#End Region
End Class
End Namespace
Det här funkar fint:
<script runat="server">
void Page_Load(System.Object sender, System.EventArgs e)
{
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
ddlFeedLanguage.DataBind();
}
</script>
...
<telerik:RadComboBox ID="ddlFeedLanguage" runat="server" Width="180px" />
Men nu skrivs ju alla locales ut i listan (en-US, sv.SE ..).
Om jag istället vill skriva ut deras namn, dvs. English, Svenska osv. hur gör jag då? Det bör väl gå att lösa genom att loopia igenom DotNetNuke.Services.Localization.Localization.GetEnabledLocales() istället, men hur bör koden se ut?
johaseoMedlem sedan maj 2009250 inlägg Konstigt .... efter att först kört detta exempel:
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
ddlFeedLanguage.DataBind();
så bytte jag tillbaks till det tidigare ej fungerande exemplet som nu fungerar!!!
ddlFeedLanguage.DataSource =DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys ;
ddlFeedLanguage.DataBind();
Båda dom där funkar för mig.
Men jag måste ha ut allt som en array eller så, så att jag får ut "Locale" och även "Nativ name".
Förslag?
Ett tips, använd gärna [kod ][/ kod] taggen när du postar kod, så går den att läsa!
johaseoMedlem sedan maj 2009250 inlägg Jag skulle använda:
System.Globalization.CultureInfo objCultureInfo
= new System.Globalization.CultureInfo("sv-SE");
där har du :
objCultureInfo.DisplayName="Svenska (Sverige)"
objCultureInfo.EnglishName="Swedish (Sweden)"
Okej, så här ser det ut:
<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>
<script runat="server">
void Page_Load(System.Object sender, System.EventArgs e)
{
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().AllKeys;
ddlFeedLanguage.DataBind();
}
</script>
...
<telerik:RadComboBox ID="ddlFeedLanguage" runat="server" Width="180px">
<Items>
<telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
<telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
<telerik:RadComboBoxItem Text="RadComboBox" ImageUrl="Img/ComboboxPr.gif" runat="server"></telerik:RadComboBoxItem>
</Items>
</telerik:RadComboBox>
Jag måste alltså loopa igenom DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys; och sen ange en ny CultureInfo varje varv på loopen. Men hur skriver jag ut telerikkoden? Är det sånt här man använder Eval() till?
Jag är mer eller mindre grön på C# så skulle uppskatta lite hjälp på traven.
Tack!
johaseoMedlem sedan maj 2009250 inlägg bara för att du är Djurgårdare och jag därmed tycker synd om er pga eran tabellplacering så skall jag skriva koden till dig ... ett ögonblick
johaseo skrev:
bara för att du är Djurgårdare och jag därmed tycker synd om er pga eran tabellplacering så skall jag skriva koden till dig ... ett ögonblick
Man tackar man tackar.. :) Har inte så bra koll på Svensk fotboll längre, får börja hålla på Sliema Wanderers istället!
johaseoMedlem sedan maj 2009250 inlägg Protected Sub ddlFeedLanguage_DataBound(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ddlFeedLanguage.DataBound
Dim ddlFeedLanguage As DropDownList
ddlFeedLanguage = CType(sender, DropDownList)
Dim i As Integer
For i = 0 To ddlFeedLanguage.Items.Count - 1
Dim objListItem As New ListItem
objListItem = ddlFeedLanguage.Items(i)
Dim objCultureInfo As New System.Globalization.CultureInfo(objListItem.Text)
objListItem.Text = objCultureInfo.DisplayName
Next
Dim kalle As Integer = 0
End Sub
ursäkta men en kund ringde .... och det gick fortare för mig i VB.Net .... varför skriver du dotnetnuke i C# förresten ? dotnetnuke finns ju mestadels i VB.Net kod
Tack ska du ha.. Får försöka skriva om det till C#, eftersom resten av sidan är C#. Anledningen till det är att vår tredjepartleverantör som levererar våra specialmoduler gör allt i C#.
Jag som normalt sysslar med PHP tycker C# har skönare syntax, därför kör jag hellre C#.
Nått sånt här blir det översatt:
protected void ddlFeedLanguage_DataBound(System.Object sender, System.EventArgs e)
{
DropDownList ddlFeedLanguage = default(DropDownList);
ddlFeedLanguage = (DropDownList)sender;
int i = 0;
for (i = 0; i <= ddlFeedLanguage.Items.Count - 1; i++) {
ListItem objListItem = new ListItem();
objListItem = ddlFeedLanguage.Items(i);
System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
objListItem.Text = objCultureInfo.DisplayName;
}
int kalle = 0;
}
Men ska jag fortfarande ha kvar:
void Page_Load(System.Object sender, System.EventArgs e)
{
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys;
ddlFeedLanguage.DataBind();
}
?
Förstår inte riktigt hur det här hänger ihop.
johaseoMedlem sedan maj 2009250 inlägg protected void ddlFeedLanguage_DataBound(object sender, System.EventArgs e)
{
DropDownList ddlFeedLanguage =new DropDownList();
ddlFeedLanguage = (DropDownList)sender;
for (int i = 0; i < ddlFeedLanguage.Items.Count; i++)
{
ListItem objListItem = new ListItem();
objListItem = ddlFeedLanguage.Items[i];
System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
objListItem.Text = objCultureInfo.DisplayName;
}
}
så här är en fungerande och testad kod
jo du skall fortfarande ha med
ddlFeedLanguage.DataSource = DotNetNuke.Services.Localization.Localization.GetEnabledLocales().Keys;
ddlFeedLanguage.DataBind();
annars har du inte bundigt data vid kontrollen. Du måste även ha med OnDataBound i Html koden
<asp:DropDownList ID="ddlFeedLanguage" OnDataBound="ddlFeedLanguage_DataBound" runat="Server"></asp:DropDownList>
johaseoMedlem sedan maj 2009250 inlägg Det där lät ju intressant ... ni är inte på jakt efter en mycket erfaren dotnetnuke tredjepartsleverantör?
Det där fungerar kanon, men jag vill ju använda min Teleriklista och när jag kör med den får jag:
Unable+to+cast+object+of+type+'Telerik.Web.UI.RadComboBox'+to+type+'System.Web.UI.WebControls.DropDownList'
Tanken med det hela är att jag senare även ska lägga till resp. flagga som ikon före texten.
Såhär:
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/textwithicons/defaultcs.aspx
Såhär lägger man till en rad i listan:
RadComboBox1.Items.Insert(0, new RadComboBoxItem(TextBox1.Text));
Så jag måste få in det i loopen på något sätt.
Yes! Om man försöker lite själv så är det inte så svårt.
protected void ddlFeedLanguage_DataBound(object sender, System.EventArgs e)
{
RadComboBox ddlFeedLanguage =new RadComboBox();
ddlFeedLanguage = (RadComboBox)sender;
for (int i = 0; i < ddlFeedLanguage.Items.Count; i++)
{
RadComboBoxItem objListItem = new RadComboBoxItem();
objListItem = ddlFeedLanguage.Items[i];
System.Globalization.CultureInfo objCultureInfo = new System.Globalization.CultureInfo(objListItem.Text);
objListItem.Text = objCultureInfo.DisplayName;
objListItem.ImageUrl = "/images/loadingico.gif";
}
}
johaseo skrev:
Det där lät ju intressant ... ni är inte på jakt efter en mycket erfaren dotnetnuke tredjepartsleverantör?
Lite stressad nu, drar ett PM under morgondagen!