【问题标题】:Access Master Page control (html: Input) from Content Page doesn't work从内容页面访问母版页控件(html:输入)不起作用
【发布时间】:2021-08-02 01:22:25
【问题描述】:

我在母版页上有一个输入控件,我在其中存储由运行 onload 的 javascript 返回的窗口大小。我需要从内容页面访问这些控件,但我无法使其工作。为了使事情更明显和更容易,我使用输入类型“文本”。一旦一切正常,我会将其切换为“隐藏”

<input type="text" runat="server" id="hiddenInputW" />

在内容页面上,我正在尝试访问 on page_load 事件中的控件。

HtmlInputText width = (HtmlInputText)Page.Master.FindControl("hiddenInputW");
HtmlInputText height = (HtmlInputText)Page.Master.FindControl("hiddenInputH");

另一个不起作用的选项是在 Masterpage 上创建此方法:

public string WindowWidth
{
    get
    {
        return Convert.ToString(hiddenInputW.Value);
    }
} 

并从内容页面端访问(在 page_load 中)

LabelTest.Text = Master.WindowWidth;

这两次数据都没有传递到内容页面。

我通过 LinkBut​​ton 和代码访问内容页面:

Response.Redirect("ProcessMap.aspx");

我用来获取窗口大小的 Javascript 是:

<script src="jquery-1.9.1.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$("#hiddenInputW").val($(window).width());
$("#hiddenInputH").val($(window).height());
});
</script>

【问题讨论】:

    标签: javascript c# html asp.net master-pages


    【解决方案1】:

    好的,如上所述,请阅读我的 cmets。问题是页面首先在服务器上呈现,后面的代码运行(但你还不能得到那些隐藏的字段值)。

    然后页面向下移动到浏览器,页面被渲染并显示在浏览器中,然后运行 ​​js 代码来设置/获取/抓取屏幕分辨率内容并将这些值保存到隐藏字段中。

    您实际上描述了行为:可以在页面上第一次回发获取值。那么我该如何解决这个问题

    如前所述,任何按钮单击 - 您不仅限于第一次回发,但实际上任何和所有后续回发都将允许您获取值。是的,这包括使用链接按钮。因此,如果您乐于接受以某种形式的回发(包括链接按钮)获取这些值,那么很好。

    如果您愿意,您可以在不回发的情况下获取这些值。您要做的是代替第一次运行客户端的 js 代码,即 js 代码可以运行并调用将值传递给服务器的 web 方法,然后您可以说将值保存在 session() 中。所以要么你在额外的回传中获取这些值(第一个,或者在第一页加载之后的每个人,或者你让那个 js 代码运行并对服务器上的一个 web 方法进行 AJAX 调用,然后可以说将这些值保存到会话()。

    所以,你有以上两种选择:

    Get the values in the hidden fields on any postback that occurs on that page.
    
    Use a AJAX call which does not require a post-back, but such calls of course don't 
    do a post-back, so you can't get/grab/see in code behind the controls on the FIRST
    page load since they are still sitting on the users desktop.
    However a AJAX call does allow you to pass values to the server, and thus as a
    result you can/could have this information available from that point on, which
    of course means on ANY new post-back, which of course is quite much the first 
    example and use case anyway!
    

    即使我们确实使用 AJAX 调用和 Web 方法? 然后现在您的代码可以看到/使用这些值,但您只能在某些导致回发的用户交互上运行此类代码!

    (除非您只是想将屏幕大小和客户端浏览器记录到数据库中 - 这当然表明 AJAX 调用会更好。这取决于您需要该信息的目的以及您的工作方式使用它?如果您只是记录此信息 - 那么是的,AJAX 调用会更好。

    如果您的应用程序需要这些信息,那么使用 AJAX 调用几乎没有什么好处,因为您在该站点上运行的任何和所有代码都将是回发的结果,所以现在我们还是回到正题。

    简单的问题是您无法在第一页加载时获得这些值。但是话又说回来,这很可能无关紧要,并且将来对此类值的任何使用都将是回发的结果。

    【讨论】:

    • 谢谢Albert,我终于投降了,将使用固定的窗口大小。我可以使它适用于您首先使用其默认内容页面加载母版页的场景,其中不需要特定大小的渲染。在该步骤中,尺寸被抓取,并且可以在我进入内容页面时用于下一次回发。但是我无法从一开始就访问这些内容页面,并且无法按照您的预测在第一次渲染时获得大小。无论如何,感谢您解释这些观点
    猜你喜欢
    • 2020-01-14
    • 1970-01-01
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-27
    • 1970-01-01
    相关资源
    最近更新 更多