我实际上正在建立一个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;
...
}
但我只是在帐户中得到了“
感谢您的帮助,
昆汀
答案 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方法就会变得庞大。但那只是我的意见。