我使用隐藏的输入字段将值从我的javascript传递给后面的代码。这很好用,但是当我尝试从后面的代码中清除字段时,这不起作用。
<input type="hidden" id="iRowNumberTblOne" name="iRowNumberTblOne" value="" runat="server"/>
我厌倦了通过几种方式来做,但它们都不起作用。
这是最简单的方法和大多数逻辑,但它不想清除值
iRowNumberTblOne.Value = "";
我甚至制作了一个javascript,因此会在客户端清除这些值。 警报在第一次“启动时”出现,但在回发后,似乎后面的代码没有再找到javascript。
<script type="text/javascript">
function clearInputFileds() {
alert('test');
document.getElementById("ctl00_contentHolder_iSiteAlias").value = "";
document.getElementById("ctl00_contentHolder_iServiceName").value = "";
document.getElementById("ctl00_contentHolder_iRowNumberTblOne").value = "";
document.getElementById("ctl00_contentHolder_iRowNumberTblTwo").value = "";
}
</script>
这是我在代码隐藏中使用的代码
Page.ClientScript.RegisterStartupScript(GetType(), "", "clearInputFileds();", true);
你知道为什么这些方法不起作用吗?也许知道清除这些领域的更好方法吗?
编辑:
输入字段由javascript函数填充。 此函数会在onClick上运行。
function setClickedValues(siteAlias, serviceName, rowNumberTblOne, rowNumberTblTwo) {
document.getElementById("ctl00_contentHolder_iSiteAlias").value = siteAlias;
document.getElementById("ctl00_contentHolder_iServiceName").value = serviceName;
document.getElementById("ctl00_contentHolder_iRowNumberTblOne").value = rowNumberTblOne;
document.getElementById("ctl00_contentHolder_iRowNumberTblTwo").value = rowNumberTblTwo;
}
答案 0 :(得分:2)
这可以在后面的代码中完成。但重要的是在ASP.Net应用程序生命周期的正确时间。仔细看看:
通常,您(重新)在提交按钮的Click事件处理程序或LoadComplete事件中设置值。如果您之前执行此操作,则在ViewState恢复时,该值将被覆盖。
使用ASP.Net页面和ViewState时,以下图像非常有用:
(来源:http://msdn.microsoft.com/en-us/library/ms178472%28v=vs.100%29.aspx)
BTW:使用硬编码ID重置客户端代码中的值是一个非常糟糕的主意,因为它们可能会发生变化。
答案 1 :(得分:2)
由于所有这些都是服务器端元素(您将它们作为runat="server"
),因此清除值的最简单方法就是:
elementID.Value="";
回发后的所有这些。如果你说在执行上述操作后没有清除这些值,可能是因为你在执行首先填充值的函数之前没有检查if(!IsPostback)
。
您的客户端代码也应该有效,但它可能会失败,因为您对RegisterStartupScript的最后一个参数是true
,这表示应该添加<script>
标记。这可能会导致问题,因为您的函数已经包含在<script>
标记中,因此在这种情况下不需要最后true
个参数。