我在页面上有一个div,其内容将通过javascript更改,我希望从c#代码获取其值。但是,它总是返回空值或初始值,而不是更改值。
如果我从div更改为隐藏,则效果很好。我不知道为什么?
这是代码:
<head runat="server">
<title>Untitled Page</title>
<script type="text/javascript">
foo = function()
{
var d = document.getElementById('divTest');
d.innerHTML = 'my value';
var e = document.getElementById('hiddenTest');
e.value = 'my value';
}
</script>
</head>
<body>
<form id="form1" runat="server" >
<div>
<div id="divTest" runat="server" />
<input type="hidden" runat="server" id="hiddenTest" />
<input type="button" value="test" onclick="javascript:foo();" />
<asp:Button ID="btnTest" runat="server" Text="ASP.NET Button" OnClick="OnbtnTest" />
</div>
</form>
</body>
这是c#代码:
protected void OnbtnTest(object sender, EventArgs e)
{
Response.Write( string.Format("alert('{0}');", hiddenTest.Value) );
}
答案 0 :(得分:2)
那是因为只有表单元素被提交回服务器端。
答案 1 :(得分:2)
将表单元素中的输入元素表单发布到服务器,所有其他内容都是静态的,不会发布到服务器。这是HTTP的基本规则,您可以看到详细信息from here。
您有两个选项,在准备div的内容时,在隐藏字段中写入相同的内容。在服务器端获取隐藏字段的值。
或者在准备内容时进行AJAX调用以便在服务器端获取它。
答案 2 :(得分:0)
您的javascript代码无法看到 hiddenTest 和 divTest 控件,因为它们是从服务器端运行的。您的javascript将尝试查找控件的客户端ID。请尝试用以下函数替换函数foo():
foo = function()
{
var d = document.getElementById('<%= this.divTest.ClientID %>');
d.innerHTML = 'my value';
var e = document.getElementById('<%= this.hiddenTest.ClientID %>');
e.value = 'my value';
}
答案 3 :(得分:0)
那么实际目标是什么?您希望在用户更改输入时跟踪先前的值,还是要将用户输入的值返回到服务器端脚本?或者您只是希望用户看到他们刚刚输入的数据的警报?
如果是第一个,您只需将之前的数据移动到该函数中的数组或对象即可。因此,您需要添加一个onchange事件处理程序,该处理程序会在替换“当前值”之前将先前存储的“当前值”移动到“旧值”数组。
如果要将输入值传递给服务器,则需要使用AJAX。这也将简化您的代码。它不是让C#做UI工作,而是只是处理用户输入,决定返回值,然后将其传递回javascript,然后javascript将其输出给用户。我建议jquery使ajax更容易,例如:
$("input#testinput).post(
"myserverscript.aspx",
{question : "Who Loves the Sun?"},
function(answer) {
alert("Answer: " + answer);
});
但是有了你的问题,我对确切正确的答案有点模糊,因为我不知道为什么你首先使用C#位做一些javascript可以做的事以及你为什么使用asp按钮而不是普通的HTML。
答案 4 :(得分:0)
在我的情况下,我最终使用AJAX HTMLEditor而不是Div标签。与Div不同,客户端对HTMLEditor所做的任何更改都将发布到服务器