【问题标题】:ASP Net - Casting a Request.Form control from Code BehindASP Net - 从后面的代码中转换一个 Request.Form 控件
【发布时间】:2010-10-15 18:03:49
【问题描述】:

这看起来很简单,但由于某种原因我难住了..

我动态生成一个 HTML 选择框,我们称之为 myselect。我根据一些数据库值创建了这个选择框我生成了一个 HTML 选择框.. 几乎就像一个字符串,我只是吐出到页面上。所以它永远不是代码隐藏中的控件,只是浏览器呈现为 HTML 的字符串的一部分。如果我提交表单,并在我的代码隐藏中执行:

Dim myVal as String = Request.Form("myselect")

该代码将为我提供 myselect 选择框的值。如何引用此控件以将其转换为 System.Web.UI.HtmlControls.HtmlSelect 控件? Request.Form 似乎给了我价值,但我想引用对象本身..

【问题讨论】:

    标签: asp.net html vb.net


    【解决方案1】:

    如果此选择框未在您的页面上静态声明(即,您将其添加到控件集合中),则您必须执行以下操作:Dim MySelect as HtmlSelect = Page.FindControl("MySelect") as HtmlSelect

    如果我的转换语法有点不对劲,请原谅我——我习惯用 C# 进行转换。

    【讨论】:

    • 不,谢谢。该控件不在集合中,它不是服务器控件,只是在页面上呈现的 HTML 选择框...
    • 您不能引用仅在页面上呈现的控件。您必须指定 runat="server" 属性才能引用代码隐藏中的控件。
    • 我担心是这种情况:(
    • 你想要完成什么?如果这个选择框是基于数据库值创建的,我看不出它不能成为服务器控件的任何特殊原因。
    【解决方案2】:

    如果您在代码文件中动态生成控件,那么回发时您将无法使用它。只要您在处理视图状态之前再次生成它(您可以在 oninit 中执行此操作),那么您就可以像访问其他任何内容一样访问它。

    MySelect.SelectedValue
    

    【讨论】:

    • 谢谢加布里埃尔,让我澄清一下,基于一些数据库值,我生成了一个 HTML 选择框.. 几乎就像一个字符串,我只是吐出到页面上。所以它永远不是代码隐藏中的控件,只是浏览器呈现为 HTML 的字符串的一部分。我也会编辑我的问题,所以也许它会更有意义..
    • 在这种情况下,您无能为力。为什么需要控制?也许有一种更好的方法可以将它添加到您的页面中,从而满足您的需求。
    【解决方案3】:

    针对上述 cmets(感谢您的帮助),我发现 Gabriel McAdams 和 jwiscarson 所说的都是真的。在浏览 Request 对象时,我发现它只不过是一个键\值对的集合。执行 Request.Form("myformobj") 将返回一个值,因为这就是应用程序可用的所有内容。如有必要,我想我可以编写一些漂亮的 javascript 来跟踪表单对象类型,但在我的情况下肯定没有必要。

    感谢您的帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2015-04-06
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多