更改时将选择值传递给母版页

问题描述

我正在为我的公司使用 ASP.NET 应用程序。我有一个带有选项的导航栏的 MasterPage。其中一个选项显示一个页面,但现在公司要求我将参数传递给链接。我已经找到了如何做到这一点(使用 Main.Master 类中的一个属性)。但这是我遇到问题的地方。 Tha 参数必须是来自主页中选择元素的值,并且必须在用户选择后立即保存在属性中。

我无法调用 onChange 事件,因为该元素不是 asp 组件,我不能更改它,因为 API (Select2) 需要它是一个普通的 html 元素。但也许有办法;如果你知道,请告诉我怎么做。

我也尝试用 JS 检索值并用 ajax 将其从母版页传递,但它不起作用,因为它只调用静态方法,而静态方法不能使用 MasterType 引用来更改主.主。

那么,是否存在某种方式来实现我想要的?另外,很抱歉没有发布代码,但这有点机密。

解决方法

是的,你可以。可能是最简单的?

好吧,在您的主菜单中(类似基于引导程序默认菜单),您可以代替 href 链接,放入菜单按钮(使用链接按钮)。

所以,假设我们有这个菜单标记

<div class="navbar-collapse collapse">
    <ul class="nav navbar-nav">
        <li><a runat="server" href="~/">Home</a></li>
        <li><a runat="server" href="~/About">About</a></li>
        <li><a runat="server" href="~/Contact">Contact</a></li>
        <li>
            <asp:LinkButton ID="LinkButton1" runat="server" Text="My Test Update" OnClick="LinkButton1_Click"></asp:LinkButton>
        </li>
    </ul>
</div>

因此,您拥有标准菜单 - hrefs - 它们无需任何代码即可跳转。

但是,请注意最后一个菜单 - “我的测试更新”。

那是一个链接按钮。所以现在您的母版页代码存根中有一个事件存根。

你会得到一个这样的菜单:

enter image description here

我只是在那个页面上的一个文本框中输入了内容。像这样:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <h2><%: Title %>.</h2>
    <p>Your app description page.</p>
    <p>Use this area to provide additional information.</p>


    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

</asp:Content>

到目前为止,这是简的计划。

那么,现在我们怎样才能拿起文本框呢?好吧,您可以在母版页中执行此操作 - 代码隐藏:

 Protected Sub LinkButton1_Click(sender As Object,e As EventArgs)

    Dim MyContent As ContentPlaceHolder
    MyContent = Me.FindControl("MainContent")

    Dim MyTextBox As TextBox = MyContent.FindControl("TextBox1")

    Debug.Print("text box value = " & MyTextBox.Text)
    Response.Redirect("~/RadioFun.aspx")

End Sub

所以请注意我们是如何简单地获取文本框值的。现在如何传递到下一页?哎呀,你可以使用 session,或者使用该值作为你跳转到的 url 中的参数,或者其他什么。

那么,通过将菜单导航从 href 替换为链接按钮?好吧,它看起来一样,但现在您的母版页代码中隐藏了一个事件代码。如上所示,提取/提取值非常容易 - 如上所述,您可以将该值推送到 session() 中,然后跳转到菜单单击按钮(链接按钮)应该导航的页面也。您也可以考虑使用回发 URL。如果您仔细观察,请注意 Page.PreviousPage 是页面的一个属性。 “上一个”页面仅在第一页加载时有效,并且仅在相关按钮使用回发 URL 时有效。所以,我们可以转储链接按钮事件(但仍然使用链接按钮)。在标记中设置链接按钮的回传 url。这样,然后在页面加载(仅第一次加载 - postback = false,然后你可以自由使用 page.prevous - 你可以像我上面那样对那个页面使用 find 控件 - 你可以自由获取“许多”控件- 不只是传递一个值。

PostBackURL 因此是另一种方式 - 我经常在放置在页面上的按钮中使用 PostBackURL - 它会导航到新页面 - 这样做没有存根背后的事件代码,但更重要的是使用该按钮/控件的 PostBackURL 设置还允许您使用/获取/获取 page.previousPage 属性 - 前一页实际上是传递给服务器的整个上一页 - 然后您可以从整个表单或其他内容中获取说值。请记住,由于您有一个母版页,那么两步过程(获取内容页,然后仍然需要在该页面上的查找控件)。

所以以上两种方法都可以。