首次加载时,将数据从javascript发送到代码

时间:2012-05-31 14:20:00

标签: c# javascript asp.net

我实际上正在建立一个Web应用程序,我需要获取查看应用程序的机器本地环境的数据。为此,我使用了一些小的javascript脚本,例如:

<script language="javascript">
function GetUserName()
{
    //Permits to get username of client machine
    var wshell = new ActiveXObject("WScript.Shell");
    var arpege = wshell.ExpandEnvironmentStrings("%USERNAME%");
    document.getElementById("arpege").value=arpege;
}
</script>
<input type=hidden id="arpege" runat=server />

我的问题是这个脚本是在页面加载后执行的,所以我不能在页面加载时使用它...

我在页面加载上的代码是:

protected void Page_Load(object sender, EventArgs e)
{
    myConnection.ConnectionString = ActionSource.ConnectionString;
    myConnection.Open();
    String account = arpege.value;
    ...
}

但我只是在帐户中得到了“

感谢您的帮助,

昆汀

5 个答案:

答案 0 :(得分:0)

在将任何数据发送到客户端之前,

Page_Load发生在服务器端上。

如果没有在页面加载后启动新回发,则无法执行此操作。

即将推出解决方案......

编辑:

所以,(可能)可以使用一些jQuery

来实现这一点
$(document).ready(function() {
     var wshell = new ActiveXObject("WScript.Shell");
     var arpege = wshell.ExpandEnvironmentStrings("%USERNAME%");
     __doPostBack('__Page', arpege);
});

并在服务器端抓住它:

public void Page_Load(object sender, EventArgs e)
{
  string arpege= Request["__EVENTARGUMENT"]; 
}

值得一试!

答案 1 :(得分:0)

Shai提出的命题的变体如下: 在隐藏按钮上生成异步后备。

就像这样,逻辑可以与Page_Load分开,和 而是放在附加到生成asyncposbackback的输入的处理程序中。

我不喜欢在page_load事件中添加太多逻辑,我发现它令人困惑。

虽然实施会有点复杂

答案 2 :(得分:0)

在Page_Load中获取用户名服务器端,而不是使用ActiveX控件。

protected void Page_Load(object sender, EventArgs e)
{
    myConnection.ConnectionString = ActionSource.ConnectionString;
    myConnection.Open();

    String account = User.Identity.Name;
    // ...

}

此外,ActiveX仅适用于Internet Explorer - User.Identity.Name适用于服务器,适用于所有浏览器。

答案 3 :(得分:0)

ASPX代码:

<body>
<form id="form1" runat="server">
<input type="hidden" id="hdnUser" runat="server" />
<input type="hidden" id="hdnRun" runat="server" value="true" />
<asp:Label ID="lblSayHello" runat="server" Text="I dont know you"></asp:Label>
</form>
<script type="text/javascript">
    $(function () {
        var run = $('#hdnRun').val();

        if (run == 'true') {
            var wshell = new ActiveXObject("WScript.Shell");
            $('#hdnUser').val(wshell.ExpandEnvironmentStrings("%USERNAME%"));
            $('#form1').submit();
        }
    });
    </script>
</body>

背后的守则

protected void Page_Load(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(hdnUser.Value))
        {
            hdnRun.Value = "false";

            lblSayHello.Text = String.Format(@"Hello, {0}", hdnUser.Value);
        }
    }

答案 4 :(得分:0)

我知道从客户端向服务器发送数据的最佳(最简单)方式是

1。将其存储在asp隐藏字段中

2. 通过javascript点击ASP按钮

3. 处理OnClick事件中的数据

例如:

ASPX页面

<asp:HiddenField ID="myHf" class="myHf" runat="server" />

<asp:Button ID="myButton" class="myButton" runat="server" OnClick="myButton_Click" style="display: none;" />

<强>的Javascript

function SendMyData(data) {
     document.getElementByClassName('myHf').value = data;
     document.getElementByClassName('myButton').click();
     //I use classes since those won't change - IDs become really long and messed up 
     //in the actual page, and may change depending on where the element is placed.
}

<强>代码隐藏

protected void myButton_Click(object sender, EventArgs e)
{
    //Do whatever you want with myHf.Value

    MyServerMethod(myHf.Value);
}

我认为这样做比使用Page_Load并提交表单更好,因为如果你做得足够多,那么Page_Load方法就会变得庞大。但那只是我的意见。