ASP.NET-访问FormView控件的最终呈现HTML

贾斯汀·霍尔斯卡夫(Justin Holdsclaw)

我正在尝试使用单独的网页来生成可以通过AJAX返回到另一个网页以更新面板的HTML。但是,我找不到一种方法来访问呈现的HTML以通过Response.Write(...)返回。

我的网页代码如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="WarehouseDetails.aspx.cs" Inherits="WarehouseDetails" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="frmMain" runat="server">
        <div id="content" runat="server">
        <asp:FormView ID="fvwWhseDetails" runat="server" AllowPaging="false" RenderOuterTable="false">
            <ItemTemplate>
                <div class="col-md-8"><asp:TextBox ID="txtItemNum" runat="server" CssClass="form-control" Text='<%# Eval("OrderCode") %>' disabled/></div>
                ....
                ....
                ....
            </ItemTemplate>
        </asp:FormView>
        </div>
   </form>
</body>
</html>

页面加载后,它将呈现类似于以下内容的HTML:

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>

</title></head>
<body>
    <form method="post" action="WarehouseDetails.aspx" id="frmMain">
        <div id="content">
            <div class="col-md-8"><input name="fvwWhseDetails$txtItemNum" type="text" value="159580" id="fvwWhseDetails_txtItemNum" class="form-control" disabled="" /></div>
            ....
            ....
            ....
        </div>
    </form>
</body>
</html>

我要完成的工作是返回与...区域一起包含的所有呈现的HTML。但是,我尝试过的任何方法似乎都无效。

在我的代码隐藏文件中,我尝试了以下用于HTML检索的方法,并在每个方法的下方注释了相应的错误:

public partial class WarehouseDetails : System.Web.UI.Page
{
    protected string strORAConnectionString = ConfigurationManager.ConnectionStrings["OraConnectionString"].ConnectionString;

    protected void Page_Load(object sender, EventArgs e)
    {
        string strSelect = @"...";

        using (OleDbConnection oraHQDB = new OleDbConnection(strORAConnectionString))
        {

            OleDbCommand command = new OleDbCommand(strSelect, oraHQDB);
            oraHQDB.Open();

            OleDbDataReader reader = command.ExecuteReader();
            if(reader.HasRows)
            {
                fvwWhseDetails.DataSource = reader;
                fvwWhseDetails.DataBind();

                // Everything up until this point works fine.
                // If the code below is excluded,
                // the page renders correctly.

                string resp;

                // Method 1 - try to access InnerHTML of <div id="content">...</div>
                System.Web.UI.HtmlControls.HtmlGenericControl div = (System.Web.UI.HtmlControls.HtmlGenericControl)frmMain.FindControl("content");
                string resp = div.InnerHtml;
                // Error generated:
                //    System.Web.HttpException:
                //    Cannot get inner content because the contents are not literal.

                // Method 2 - try to use RenderControl()
                StringWriter sw = new StringWriter();
                HtmlTextWriter w = new HtmlTextWriter(sw);
                frmMain.RenderControl(w);
                fvwWhseDetails.RenderControl(w);
                fvwWhseDetails.Row.RenderControl(w);                    
                div.RenderControl(w);
                resp = sw.GetStringBuilder().ToString();
                // Error generated: 
                //    System.Web.HttpException:
                //    Control '[control]' of type '[type]' must be placed inside a form tag with runat=server.

                Response.Write(resp);
            }
            else
            {
                Response.Write("No results found.");
            }
            Response.End();
            reader.Close();
        }
    }
}

我反复搜索并尝试将内容包装在各种容器和服务器控件中,但是无论如何我总是回到上面列出的两个错误之一。

在FormView中访问完全呈现的HTML的正确方法是什么?

贾斯汀·霍尔斯卡夫(Justin Holdsclaw)

通过此答案,我找到了一个简单的解决方案:

https://stackoverflow.com/a/17058409/363892

基本上,我必须重写VerifyRederingInServerForm方法以绕过<form ... runat="server">调用时绕过控件是否包含在控件中的验证fvwWhseDetails.Rendercontrol(w);

此外,我必须通过<%@ Page ............ EnableEventValidation="false" %>在页面上进行设置来禁用事件验证,以允许FormView控件独立呈现。

我不完全了解绕过这两个保护措施的含义,但是由于此页面仅用于返回此FormView控件,因此我现在将继续介绍解决方案。如果有人有更合适的解决方案,请随时做出贡献,我将相应地更改答案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ASP.NET-访问FormView控件的最终呈现HTML

来自分类Dev

ASP.NET 控件呈现

来自分类Dev

访问ASP.net MVC中动态添加的HTML控件

来自分类Dev

访问GridView ItemTemplate控件ASP.NET

来自分类Dev

使用javascript访问ASP.NET控件

来自分类Dev

在<label> html标记中呈现的ASP.NET Web窗体中是否有任何控件?

来自分类Dev

ASP.NET图像控件在错误的DOM位置中呈现

来自分类Dev

将ASP.NET Rating控件值放置在FormView控件中时设置

来自分类Dev

将ASP.NET Rating控件值放置在FormView控件中时设置

来自分类Dev

ASP.net刷新控件

来自分类Dev

ASP.NET图表控件

来自分类Dev

asp.net无法访问动态创建的控件

来自分类Dev

在ASP.net中更新FormView

来自分类Dev

FormView中的ASP.NET DropDownList

来自分类Dev

在ASP.NET MVC视图中呈现HTML文件?

来自分类Dev

C#ASP.net呈现HTML字符串

来自分类Dev

在Asp.net HTML控件中动态获取城市

来自分类Dev

在HTML标记中声明asp.net控件

来自分类Dev

在ASP.NET的多个父项中添加HTML控件

来自分类Dev

ASP.NET MVC重定向至操作不会呈现最终视图

来自分类Dev

Asp.net Core如何呈现视图

来自分类Dev

ASP.NET MVC视图模型呈现

来自分类Dev

ASP.NET MVC视图模型呈现

来自分类Dev

Asp.net在输入字段的自定义属性中呈现控件客户端ID

来自分类Dev

在 DIV 布局而不是 TABLE 布局中呈现 asp.net 向导控件

来自分类Dev

在ASP.NET中获取缓存的控件

来自分类Dev

ASP.net图表控件-XValueMembers计数

来自分类Dev

AngularJS视图内的Asp.Net控件

来自分类Dev

登录控件asp.net和CS