我知道有关于这个主题的解决方案,但我已经在测试页面上测试了它并且正常工作。基本上它是收据页面上的反馈表单,如果用户再次登录并付款,则它不会再次看到该表单。 我通过在DOM中放置一个隐藏字段,并在后面的VB代码中将值从“Y”切换到“N”来实现这一点,这一切都在测试页面上正常工作。但是当我在应用程序中对其进行编码时,它会给我一个错误“ TypeError:无法读取属性'值'null ”。我虽然起初javascript试图读取dom,当它还没有实际渲染时,所以我将javascript切换到页面底部,甚至在其上放置一个计时器以确保所有内容都已加载,仍然是相同的结果。我不明白为什么它在一个应用程序中,而不是另一个应用程序。
<asp:HiddenField ID="hidfeedback" Value="N" runat ="server" />
使用Javascript:
//Modal window appears and fades in after 5 secsonds
$(document).ready(function () {
setTimeout(function () {
var getSessionValue = $('#hidfeedback').val();
if (document.getElementById('hidfeedback').value === "N") {
$('#myModal').modal('show');
}
}, 5000);
});
答案 0 :(得分:1)
您不能以这种方式使用id,ASP.NET在将对象ID呈现给客户端时会更改它们。你应该使用这样的东西:
document.getElementById('<%=hidfeedback.ClientID%>')
答案 1 :(得分:1)
替换
var getSessionValue = $('#hidfeedback').val();
通过
var getSessionValue = $('[id*=hidfeedback]').val();
修改强>
此解决方案适用于任何容器中的所有控件。有时人们会对$(['id$=xyz'])
和$(['id*=xyz'])
感到困惑。第一个不适用于您的控件容器,如GridView
Repeater
等。
使事情更加清晰have a look of selectors here.
感谢。
答案 2 :(得分:1)
控件的客户端ID与asp.net
中的服务器端ID不同。在ID之前附加一些额外的字符。最佳解决方案是将class
设置为您的控件,并使用类选择器在jquery
中访问它们。
尝试以下解决方案:
$(document).ready(function () {
setTimeout(function () {
var getSessionValue = $("[id$='hidfeedback']").val();
if ($("[id$='hidfeedback']").val() === "N") {
$("[id$='myModal']").modal("show");
}
}, 5000);
});