【问题标题】:How can I get the parameters from url如何从 url 获取参数
【发布时间】:2012-08-20 22:25:04
【问题描述】:

我正在编写一个 aspx 让用户检查文件名并创建一个具有该名称的文件

网址是

/sites/usitp/_layouts/CreateWebPage.aspx?List=%7b74AB081E-59FB-45A5-876D-
                             284607DA03C6%7d&RootFolder=%3bText=%27SD_RMDS%27

如何解析参数'Text'并在文本框中显示?

<div>
    <asp:TextBox id="Name" runat="server" />
</div>

aspx文本框是这样的,我试过了

<asp:TextBox id="Name" runat="server" text=<%$Request.QueryString['Text']%>></asp:TextBox>>

但是没用

谁能帮帮我?

【问题讨论】:

  • 那是正确的网址吗?看起来您在 RootFolder 和 Text 参数之间缺少 &,因此它不会看到 Text 参数,您将无法将其拉回。
  • 你了解页面生命周期吗?您可以在 PageLoad 事件上初始化您的服务器控件。
  • 不,菜鸟 :P,你能告诉我如何将 page_load() 写入那个 aspx 文件吗?

标签: c# asp.net sharepoint


【解决方案1】:

获取http get参数的值:

string testParameter = Request.QueryString["Text"];

然后设置文本框文本

Name.Text = testParameter

强烈建议不要直接从 url 获取内容,因为恶意内容可能会以这种方式注入您的页面。 ASP 对此提供了一些保护,这仍然被认为是一种好的做法。

【讨论】:

  • 但我想在 aspx 标签内写一行,有什么好主意吗?
  • Name.Text 在 中?
  • 这个sharepoint文件.aspx在Layout文件夹中,如何找到控制这个的cs文件?你能帮我吗?
【解决方案2】:

如果你想从查询字符串中获取文本值,你需要使用:

var text = (string)Request.QueryString["Text"];

然后你可以将它绑定到 TextBox Name 的 Text 属性:

 Name.Text = text;

更新: 您只能在 PageLoad 事件中初始化服务器控件值。

【讨论】:

  • 您能否澄清一下“您只能在 PageLoad 事件中初始化您的服务器控件值。”。我想我知道你的意思,但它对 OP 来说并不清楚。
  • 页面生命周期包含下一个事件:PreInit、Init、PreLoad、Load、控制(回发)事件、LoadComplete、PreRender、SaveStateComplete、Render、Unload。正在为特定操作捕获所有事件。 PageLoad事件是页面稳定的时候,它已经被初始化并且它的状态已经被重建。因此,是时候从控件回发事件以外的源设置控件的值了。 msdn.microsoft.com/en-us/library/…
  • 感谢您添加该信息。当然,从“PageLoad”事件开始的方法可以自己改变控件。
【解决方案3】:

其实是这样的

string value = Name.Text;

【讨论】:

    【解决方案4】:

    您的 RootFolder 和 Text 之间的 url 中似乎缺少 &,因此将其更改为 -

    /sites/usitp/_layouts/CreateWebPage.aspx?List=%7b74AB081E-59FB-45A5-876D-284607DA03C6%7d&amp;RootFolder=%3b&Text=%27SD_RMDS%27
    

    在绑定方面你几乎是对的,应该这样做 -

    <asp:TextBox id="Name" runat="server" text='<%#Request.QueryString["Text"]%>'></asp:TextBox>
    

    但是,如果您现在运行它,它将无法正常工作,因为您需要像这样在 PageLoad 中调用 DataBind()

    protected void Page_Load(object sender, EventArgs e)
    {
        DataBind();
    }
    

    这应该按照您的意愿进行,尽管像这样直接在 PageLoad 中执行此操作可能更容易 -

    Name.Text = Request.QueryString["Text"];
    

    【讨论】:

    • 谢谢!但它不起作用,我在哪里可以调用函数 DataBind()?我可以把这段代码放在哪里?
    • 您的文本框在您的 filename.aspx 页面中,对吗?所以你应该有一个名为 filename.aspx.cs 的文件背后的代码 - 默认情况下你会在其中获得一个 Page_Load 函数(如果没有,你将不得不添加它) - 在 PageLoad 中添加 DataBind() 调用。
    • Name.Text = Request.QueryString["Text"]; 怎么样?我该如何使用它?
    • 这样做(推荐的方式)——忽略上面的所有内容,只需将这一行添加到 Page_Load 方法中——构建它,现在应该可以工作了。
    • 所以我只是把 Name.Text = Request.QueryString["Text"];在函数 Page_Load() 中,它可以正常工作吗?
    【解决方案5】:

    如果您无法访问后面的代码(SharePoint 中的常见限制),那么您可以使用 JavaScript “hack”来使用 URL 值填充文本框。

    要实现这一点,请将这段代码放在带有文本框的.aspx 页面的最底部:

    <script type="text/javascript">
        var strTextBoxId = "<%=Name.ClientID%>";
        var oTextBox = document.getElementById(strTextBoxId);
        if (oTextBox) {
            oTextBox.value = "<%=Request.QueryString["Text"].Replace("\"", "\\\"")%>";
        }
        else {
            //debug
            alert("element with ID '" + strTextBoxId + "' does not exist");
        }
    </script>
    

    请注意,这不是好的做法,只是当您无法采取最佳做法解决方案时的一种解决方法。

    【讨论】:

    • 太棒了!那么我应该在 中写什么?
    • @bowang 没什么——这就是它的魅力所在。
    • 哎呀,我只是在按钮下添加脚本,运行时出错,js文件有问题吗?(我只是在最后添加它们,没有做更多,甚至没有编辑标签)
    猜你喜欢
    • 1970-01-01
    • 2012-06-01
    • 2017-03-27
    • 2020-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    相关资源
    最近更新 更多