我从服务器获得了一些价值,如果值为false,我需要在UI上显示警告消息而不刷新或回发页面。
我目前正在做的是从服务器获取值我声明一个隐藏控件并将该值存储在隐藏控件中并在aspx页面中我编写一个JS方法来检查该值是否为false显示警报消息,但是问题是我必须在单击后面的代码中的按钮时执行此操作 所以,一旦我点击该按钮,JS代码就会在我从服务器获得价值之前执行。
function fnvalidation() {
if (document.getElementById("<%=hdnCtrl.ClientID%>").value == false) {
alert('Please submit it again');
return false;
}
}
在页面加载时,我正在注册:
btnSave.Attributes.Add("onclick", "return fnvalidation()");
C#代码:
bValidate = CommonUtility.ValidateOutput();
hdnCtrl.Value = bValidate.ToString();//Storing value in hidden variable
if(bvalidate == false)
{
//Call javascript method fnvalidation
}
如果来自服务器的值为false,如何正确调用此JS方法? 感谢。
答案 0 :(得分:0)
我认为你可以使用
Page.ClientScript.RegisterStartupScript
在你的条件中如果(bvalidate == false)条件就像那时不需要依赖于要设置的值(即在java脚本函数中你可以删除检查隐藏字段值只是提醒用户。 你也可以删除这段代码btnSave.Attributes.Add(“onclick”,“return fnvalidation()”)
Page.ClientScript.RegisterStartupScript(this.GetType(), "validateFnscript", "fnvalidation()",
true);
答案 1 :(得分:0)
如果您的页面需要从服务器获取数据而不刷新页面,那么您需要使用AJAX。这归结为两件事:
服务器端代码可能有几个选项。 HTTP处理程序,清空和响应并设置新内容类型的空ASPX页面,甚至可能是Web方法?由于我使用过WebForms,所以这是很长时间,因此我不能100%确定目前推荐的方法是什么。但是I think Web Methods are what you're looking for。所以你的代码隐藏会有类似的东西:
public partial class MyPage : Page
{
[WebMethod]
public static string GetValue()
{
return "some value";
}
}
然后,假设您正在使用jQuery,您可以从客户端代码调用该端点:
$.ajax({
type: "POST",
url: "MyPage.aspx/GetValue"
}).done(function (data) {
// respond to the value in "data"
}).error(function () {
// there was an error
});
现在,您的客户端按钮单击处理程序可以使用它或类似的东西从服务器获取值。如果该按钮需要执行 all ,则不要将其设为asp:Button
,而只是input type="button"
,以便它不会回发整个页面。将它保留为服务器端按钮意味着取消JavaScript中的事件传播,这会因异步操作而变得丑陋,因为没有立即的方式来恢复事件传播,您必须手动调用回发