我希望通过C#Code Behind文件获得window.prompt()
警报框的答案。它只是一行JavaScript代码,所以我想我甚至可以从Code Behind文件中执行它。它是<script>
文件中的.aspx
标记还是通过.aspx.cs
文件执行,对我来说并不重要。
我想过执行脚本(从C#部分调用),然后将返回值分配给某个不可见的字段,但还有更好的方法吗?
显而易见的方式可能是这样的:
.aspx file:
<script>
function foo() {
document.getElementById('MyFieldID').value = window.prompt('Answer this question:', '');
}
</script>
.aspx.cs file:
////////////////////////////////////////////////
//MyFieldID.Text now contains whatever I want//
//////////////////////////////////////////////
你怎么说?还有更好的办法吗?
答案 0 :(得分:0)
更好的方式始终以意见为基础。我所说的是你有几个选择,都取决于你正在做什么。 HTTP和ASP.NET为我们提供了一些向服务器发送数据的方法,在HTML5之前有3个主要方法:
如果您在回复提示后将用户重定向到新页面,则可以将其发送至yournewurl.aspx?promptAnswer=*whatever*
如果您正在进行回发,那么您可以使用表单值(这看起来就像您在示例中所做的那样)。您可以在页面上放置<asp:HiddenField>
并在提交表单之前从JavaScript填充它。
如果您只需要提示响应,但没有尝试重新加载页面,您可以进行一次AJAX调用,将变量发送到服务器(这仍然使用#1或#2发送数据,它只是它没有重新加载页面。)
这三个选项中哪一个最有效取决于您的实施。但是,您的解决方案应该可以正常工作。但是,由于您可能用来填充值的控件是HiddenField
,它将在MyFieldID.Value
而不是MyFieldID.Text
。你要处理的唯一另一件事是你的MyFieldID
是否嵌套在其他一些控件中(比如ContentPlaceHolder
),以致ClientID有命名容器假装它,所以它真的是一些东西从JavaScript访问时可以使用ContentPlanceHolder1_MyFieldID
。