从JS代码获取返回值到C#

时间:2015-06-20 20:19:11

标签: javascript c# asp.net

我希望通过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//
//////////////////////////////////////////////

你怎么说?还有更好的办法吗?

1 个答案:

答案 0 :(得分:0)

更好的方式始终以意见为基础。我所说的是你有几个选择,都取决于你正在做什么。 HTTP和ASP.NET为我们提供了一些向服务器发送数据的方法,在HTML5之前有3个主要方法:

  1. 查询字符串
  2. 表格值
  3. AJAX致电
  4. 如果您在回复提示后将用户重定向到新页面,则可以将其发送至yournewurl.aspx?promptAnswer=*whatever*

    如果您正在进行回发,那么您可以使用表单值(这看起来就像您在示例中所做的那样)。您可以在页面上放置<asp:HiddenField>并在提交表单之前从JavaScript填充它。

    如果您只需要提示响应,但没有尝试重新加载页面,您可以进行一次AJAX调用,将变量发送到服务器(这仍然使用#1或#2发送数据,它只是它没有重新加载页面。)

    这三个选项中哪一个最有效取决于您的实施。但是,您的解决方案应该可以正常工作。但是,由于您可能用来填充值的控件是HiddenField,它将在MyFieldID.Value而不是MyFieldID.Text。你要处理的唯一另一件事是你的MyFieldID是否嵌套在其他一些控件中(比如ContentPlaceHolder),以致ClientID有命名容器假装它,所以它真的是一些东西从JavaScript访问时可以使用ContentPlanceHolder1_MyFieldID