【发布时间】:2021-04-27 21:09:57
【问题描述】:
我正在尝试在 JavaScript 中进行提取。我没有问题,可以得到我需要的价值。我需要将此值传递给后面的 C# 代码。我已经将值放在一个隐藏字段中,一个 div 来获取 innerHTML 和一个 textbox.value。我不知道发生了什么,但我似乎无法从 C# 访问这些数据。我有一个 asp:button 执行客户端脚本,然后执行后面的代码。每当客户端脚本返回 true 时,页面就会刷新。我尝试返回 false 并且正确的值保留在页面上,但它们在后面的代码中不可用,正在执行(我觉得很奇怪,因为我从客户端返回了 false)。我将我的各种尝试包括在内,以便您可以看到所有内容。
HTML:
<asp:TextBox runat="server" ID="secretTextBox" />
<asp:HiddenField runat="server" ID="secretHiddenField" />
<div id="testdiv" runat="server">This is a test.</div>
<asp:Button runat="server" ID="btnRunMOReport" class="button-dbg" Text="Run MO Report" OnClick="btnMO_Report_Click" OnClientClick="return validateCheckBoxesMO()" />
JavaScript:
// So this makes sure the page is valid and if so executes the fetch
function validateCheckBoxesMO() {
const result = validateMO();
if (result && document.getElementById("rbMOMap").checked) {
fetch(
"https://www.arcgis.com/sharing/generateToken?f=json&username=xxx&password=xxx&client=requestip"
)
.then((response) => response.json())
.then((data) => {
token = data.token;
document.getElementById("secretTextBox").value = token;
document.getElementById("testdiv").innerHTML = token;
})
// Garbage I know but I just wanted to force a false return but wait on the promise
.then(finish => { return false });
} else {
return result; // So this can return true but only if they are not getting the map.
}
}
背后的代码(相关部分): 请注意,此时文本框和 div 都显示了我正在寻找的令牌。
这是我尝试从 DIV 中提取的地方:
var sb = new StringBuilder();
testdiv.RenderControl(new HtmlTextWriter(new StringWriter(sb)));
string s = sb.ToString().Remove(sb.ToString().Length - 6, 6);
s = s.Remove(0, 18);
s 等于“This is a test.”,这是页面加载时的内容,而不是当前在页面上显示的内容。
此时,一边查看调试器,一边secretTextBox.Text = "",secretHiddenField.Value = ""。
我已经尝试了好几天了,并尝试了不同的方法来传递这个值。我似乎做不到。除非我想重写整个应用程序,否则 MVC 并不是一个真正的选择。我觉得我错过了一些非常基本的东西,我无法弄清楚。感谢您提供任何帮助。
看来我可能需要从后面的代码中获取,但我在 C# 方面并不那么复杂。如果这似乎是一个选项,我会接受的。
【问题讨论】:
-
如果您使用调试器跟踪您的 javascript,您将看到 document.getElementById("secretTextBox") 找不到该元素。改用 name 属性来识别它们,因为 ASP.NET 服务器会更改您的 ID。
-
我对您将 DIV 呈现为 StringBuilder 的代码感到困惑。如果该值存储在隐藏字段中,则从隐藏字段中读取它。如果它没有存储在隐藏字段(或其他 HTML 输入元素)中,则它对后面的代码不可用,因为它不是通过网络发送的。
-
Dave,页面在文本框中呈现令牌。这向我表明文本框已被更改,但它不存在于后面的代码中。
-
约翰,我正试图将 DIV 读入后面的代码中。字符的剥离只是为了让 脱离字符串。它读取页面加载时 div 中的值,但不读取 div 中清晰显示的标记。
-
我猜我昨天累了。我也试过 secretHiddenField.value = token;后面两个文件语句还没有在代码后面,secretHiddenField.value = "";
标签: javascript c# html