【问题标题】:ASP Query String From DropDown来自 DropDown 的 ASP 查询字符串
【发布时间】:2012-11-09 18:35:32
【问题描述】:

我有一个网页:Menu.aspx,其中我有以下相关控件:

  • 带有一些值的 DropDownList
  • 一个超链接,它将我重定向到一个名为 Edit.aspx 的页面。

在我的 Edit.aspx 页面中,我有一个取消按钮,它将用户重定向回菜单页面

我想要做的是当我的用户单击超链接转到编辑页面时,DropDownList 的索引保留在我的 Menu.aspx 页面我有以下 aspx 代码,但我不知道如何继续

<asp:HyperLink
    ID="lnkEdit"
    NavigateUrl='<%# "Edit.aspx?" + Eval("UserID") + ...not sure... %>'
</asp:HyperLink>

<asp:DropDownList
    ID="myDropDown"
    ...some <asp:ListItems/>
</asp:DropDownList>

编辑:澄清了为什么我使用 NavigateURL。因为我的查询字符串已经做了一个 Eval 来确定用户 ID。

【问题讨论】:

  • 所以你的最终目标是将用户重定向到像Edit.aspx?userID=1&amp;DropDownValue=value这样的页面? @RoyiNamir 是对的,你必须使用 javascript。
  • 那么为什么你的问题没有用 js 标记? :-)
  • 或者您可以使用编辑“按钮”来提交页面。按钮点击事件可以做你想做的事 - 将用户重定向到 Edit.aspx?user=userId&menu=selectedValue... 或者只是使用 ddl 自动回发
  • 那么我可以这样做:NavigateURL="return getURL()" where getURL is a JS function?
  • @Rhs,您的超链接似乎在数据绑定控件中?

标签: c# asp.net


【解决方案1】:

我会使用带有服务器端OnClick 事件的LinkButton 控件。

<asp:LinkButton ID="lbtn1" runat="server" OnClick="lbtn1_Click" 
    CommandArgument='<%#Eval("UserID") %>' />

服务器端方法:

public void lbtn1_Click(object sender, EventArgs e)
{
    LinkButton lbtn = (LinkButton)sender;
    string userID = lbtn.CommandArgument;
    string dropDownValue = myDropDown.SelectedValue;
    string navigateUrl = string.Format("Edit.aspx?userid={0}&dropdown={1}", 
        userID, dropDownValue);
    Response.Redirect(navigateUrl);
}

编辑:正如 Royi Namir 在下面指出的那样,如果你可以使用 javascript,它是一个更好的选择。这会造成不必要的服务器往返行程。

【讨论】:

  • 你为什么要为了这么简单的场景往返服务器?
  • 在我写这篇文章时,他似乎不想使用 javascript。不过我同意你的看法,JS 绝对是比这次往返更好的选择。
【解决方案2】:

试试这样的

<asp:HyperLink ID="lnkEdit"
    NavigateUrl='<%# "Edit.aspx?" + Eval("UserID") + 
    "&menuid=" + myDropDown.SelectedValue %>'> MyText </asp:HyperLink>

并在您的下拉菜单中将AutoPostBack 设置为true。每当您更改下拉列表时,新选择的值都会与超链接导航 url 绑定。

【讨论】:

  • 看起来真不错。我会让你知道情况如何。但我可能倾向于将 HyperLink 更改为 LinkBut​​ton 并制作 OnClientClick 功能
  • 这不会做你想做的事。当 asp:Hyperlink 作为锚标记提供给浏览器时,将评估这些参数......因此导航 URL 不会反映更改的选定值。此外,如果您使用的是 OnClientClick,则无需从超链接更改为链接按钮。
  • @MikeSmithDev 我用一个 JS 函数为我的超链接创建了一个 OnClientClick,该函数执行一个警报框,但没有任何反应。对链接按钮做了同样的事情,它起作用了。 HyperLink 没有 OnClientClick
  • 是的,但是你可以通过给它一个 onclick 事件来做同样的事情,比如 onclick="alert('boo')"。并且上面的示例可以工作,因为它具有自动回发功能......但是重建页面只是为了设置该超链接的值并不是很有效,因此 onclick 事件更好。
  • @MikeSmithDev 是的,你是对的。我要走那条路
【解决方案3】:

这里有个简单的方法就是使用Session

示例:

Session["SessionName"] = idDropDownList;

在另一个页面上,只访问会话的内容

string idDropDownList = (string)Session["SessionName"];

希望我能帮上忙。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多