gpt4 book ai didi

jquery - ASP.NET - 访问 FormView 控件的最终渲染 HTML

转载 作者:行者123 更新时间:2023-11-28 01:43:14 27 4
gpt4 key购买 nike

我正在尝试使用一个单独的网页来生成 HTML,该 HTML 可以通过 AJAX 返回到另一个网页以更新面板。但是,我找不到一种方法来访问呈现的 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 的正确方法是什么?

最佳答案

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

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

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

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

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

关于jquery - ASP.NET - 访问 FormView 控件的最终渲染 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24457003/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com