【发布时间】:2012-11-12 13:14:03
【问题描述】:
我在网络表单的Page_Load 方法中有以下代码:
protected void Page_Load(object sender, EventArgs e)
{
CountrySelectButton.Click += new EventHandler(CountrySelectButton_Click);
if (HomePage.EnableCountrySelector) //always true in in this case
{
if(!IsPostBack)
BindCountrySelectorList();
}
}
BindCountrySelectorList 方法如下所示:
private void BindCountrySelectorList()
{
NameValueCollection nvc = HttpUtility.ParseQueryString(HomePage.CountryList);
var ds = nvc.AllKeys.Select(k => new { Text = k, Value = nvc[k] });
CountrySelector.DataSource = ds;
CountrySelector.DataTextField = "Text";
CountrySelector.DataValueField = "Value";
CountrySelector.DataBind();
}
我有一个LinkButton click 事件处理程序,它从SelectList 获取SelectedValue,如下所示:
void CountrySelectButton_Click(object sender, EventArgs e)
{
//get selected
string selectedMarket = CountrySelector.SelectedValue; //this is always the first item...
//set cookie
if (RememberSelection.Checked)
Response.Cookies.Add(new HttpCookie("blah_cookie", selectedMarket) { Expires = DateTime.MaxValue });
//redirect
Response.Redirect(selectedMarket, false);
}
编辑:
这是 DDL 和 LinkButton 的定义:
<asp:DropDownList runat="server" ID="CountrySelector" />
<asp:LinkButton runat="server" ID="CountrySelectButton" Text="Go" />
结果标记:
<select name="CountrySelector" id="CountrySelector">
<option value="http://google.com">UK</option>
<option value="http://microsoft.com">US</option>
<option value="http://apple.com">FR</option>
</select>
<a id="CountrySelectButton" href="javascript:__doPostBack('CountrySelectButton','')">Go</a>
结束编辑
ViewState 已启用,但SelectedValue 属性只返回列表中的第一个项目,而不管实际选择了哪个项目。我确定我遗漏了一些明显的东西,但我找不到问题;非常感谢任何帮助。
提前致谢。
戴夫
【问题讨论】:
-
@MikeSmithDev - 有什么特别想看的吗?这就是背后的所有代码,所以我不确定我还能提供什么。
-
是的,您的选择列表的代码前面。更多关于 LinkButton 的事件处理程序。链接按钮代码前面。你有没有调试过,看看发生了什么,比如你在某个地方重新绑定?
-
@MikeSmithDev - 我添加了 DDL 和 LinkButton 代码。我从事件处理程序中删除了所有其他内容,并在调试时检查了 SelectedValue 以确保它不是由任何其他操作引起的。我看不到它可能再次重新绑定的任何地方,但这是一个有效的问题,所以我将返回代码并检查...
-
你能粘贴下拉列表的结果html吗?它可能会更深入地了解实际写入客户端的内容。问题可能出现在流程的该步骤中。
-
如果这就是你所做的一切,你的代码就可以工作。我怀疑你没有显示更多的事情......比如ID如何从“SelectList”变为“CountrySelector”。 runat=server 标签的默认 ID 重命名看起来更像
标签: c# asp.net webforms viewstate