ドロップダウンリストから簡単な言語スイッチャーを使用していますが、リストに切り替えたいと思います。私の知る限り、AutoPostBackは箇条書きではサポートされておらず、PostBackプロパティでのみサポートされています。この場合、ポストバックを使用すると、スイッチャーが機能しなくなります。これを乗り越える方法はありますか?
<asp:DropDownList ID="cmbCulture" runat="server" AutoPostBack="True"
OnSelectedIndexChanged="cmbCulture_SelectedIndexChanged"
CssClass="lang_switcher"
DisplayMode="LinkButton">
<asp:ListItem Value="de-DE">DE</asp:ListItem>
<asp:ListItem Value="en-US">EN</asp:ListItem>
</asp:DropDownList>
そしてここにコードがあります:
public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
HttpCookie cultureCookie = Request.Cookies["Culture"];
string cultureCode = (cultureCookie != null) ? cultureCookie.Value : null;
if (!string.IsNullOrEmpty(cultureCode))
{
cmbCulture.SelectedValue = cultureCode;
}
}
}
protected void cmbCulture_SelectedIndexChanged(object sender, EventArgs e)
{
//Save Current Culture in Cookie- will be used in InitializeCulture in BasePage
Response.Cookies.Add(new HttpCookie("Culture", cmbCulture.SelectedValue));
Response.Redirect(Request.Url.AbsolutePath); //Reload and Clear PostBack Data
}
}
だから私は次のようなことを達成したいと思います:
フロントエンド:
<asp:BulletedList ID="cmbCulture" runat="server" PostBack="True" OnSelectedIndexChanged="cmbCulture_SelectedIndexChanged" DisplayMode="LinkButton">
<asp:ListItem Value="en-US">EN</asp:ListItem>
<asp:ListItem Value="de-DE">DE</asp:ListItem>
</asp:BulletedList>
バックエンド:
public partial class MasterPage : System.Web.UI.MasterPage
{
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
HttpCookie cultureCookie = Request.Cookies["Culture"];
string cultureCode = (cultureCookie != null) ? cultureCookie.Value : null;
if (!string.IsNullOrEmpty(cultureCode))
{
cmbCulture.SelectedItem.Value = cultureCode;
}
}
}
protected void cmbCulture_SelectedIndexChanged(object sender, EventArgs e)
{
//Save Current Culture in Cookie- will be used in InitializeCulture in BasePage
Response.Cookies.Add(new HttpCookie("Culture", cmbCulture.SelectedItem.Value));
Response.Redirect(Request.Url.AbsolutePath); //Reload and Clear PostBack Data
}
}
SelectedItem.Valueは、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」というエラーをドロップします。箇条書きでクリックされたリストアイテムの値を取得する方法はありますか?これが解決策かもしれません。