Telerik RadWindow Javascript将值返回到ASP.NET
作者:互联网
我有一个父页面,它启动telerik radwindow并传递一个参数.
radwindow处理完该值后,我需要它将其返回到父页面,并且我希望父页面能够在页面后面的代码中访问此值.
我试图将值传递给页面上的隐藏字段,然后触发页面刷新,并监视代码,以查看该值是否有效.
我似乎无法使它正常工作.我在父javascript中获得了返回值,但是我无法从后面的代码中的隐藏字段中获得返回值.
我什至像我需要的那样将其放入文本框中,但是当我在后面的代码中找到“隐藏”字段时,没有设置任何值.
在设置警报的地方,我会根据需要显示值.
我怀疑在文件后面的代码中看不到我的返回值的原因是,刷新页面时,我得到的是新页面,而不仅引起回发.
还有没有更好的方法可以做到这一点.
这是我在父页面中的代码:
父ASPX:
<script type="text/javascript">
function OpenWnd() {
var oWnd = radopen(null, "RadWindow1");
}
function OnClientShow(oWnd) {
//Create a new Object to be used as an argument to the radWindow
var arg = new Object();
//Using an Object as a argument is convenient as it allows setting many properties.
arg.text = document.getElementById("TextBox1").value;
//Set the argument object to the radWindow
oWnd.Argument = arg;
}
function ClientCallBackFunction(radWindow, returnValue) {
//check if a value is returned from the dialog
if (returnValue.newtext) {
document.getElementById("Hidden1").value = returnValue.newtext;
alert("HiddenValue: " + document.getElementById("Hidden1").value);
}
}
</script>
<form id="form1" runat="server">
<telerik:RadScriptManager ID="RadScriptManager1" runat="server">
</telerik:RadScriptManager>
<div>
<telerik:RadWindowManager ID="RadWindowManager2" runat="server">
<Windows>
<telerik:RadWindow ID="RadWindow1" runat="server" OnClientShow="OnClientShow" ClientCallBackFunction="ClientCallBackFunction"
NavigateUrl="Dialog2.aspx" />
</Windows>
</telerik:RadWindowManager>
</div>
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True"></asp:TextBox>
<input type="button" value="Send content to dialog page" onclick="OpenWnd()" />
<p>
<input id="Hidden1" type="hidden" runat="server" />
</p>
</form>
后面的父代码:
protected void Page_Load(object sender, EventArgs e)
{
HtmlInputHidden hidden = (HtmlInputHidden)Page.FindControl("Hidden1");
if (IsPostBack && !string.IsNullOrEmpty(hidden.Value))
{
//Code Here
}
}
这是我的对话框代码:
对话框ASPX:
<script type="text/javascript">
function GetRadWindow() {
var oWindow = null;
if (window.radWindow) oWindow = window.radWindow;
else if (window.frameElement.radWindow) oWindow = window.frameElement.radWindow;
return oWindow;
}
function ConfigureDialog() {
//Get a reference to the radWindow wrapper
var oWindow = GetRadWindow();
//Obtain the argument
var oArg = oWindow.Argument;
//Use the argument
var oArea = document.getElementById("TextBox1");
oArea.value = oArg.text;
}
function SendAndClose() {
var oWindow = GetRadWindow();
//Get current content of text area
var arg = new Object();
arg.newtext = document.getElementById("TextBox1").value;
oWindow.Close(arg);
RefreshParentPage();
}
function RefreshParentPage() {
GetRadWindow().BrowserWindow.location.reload();
alert("RefreshParentPage");
}
</script>
谢谢你的帮助
伊恩
解决方法:
您正在执行以下操作
GetRadWindow().BrowserWindow.location.reload();
但这不会导致回发,它只会重新加载父页面,您需要引起回滚.
您可以尝试将样式设置为’display:none’的按钮添加到父表单,并处理后面代码中的click事件,您可以从js代码中触发此按钮.
在父页面中:
<asp:Button runat="server" id="btnClick" Style="display:none" OnClick="btnClick_Click"/>
protected void btnClick_Click(object sender,EventArgs e)
{
string val = this.Hidden1.Value; //Code goes here
}
您可以像这样(非jQuery)从JavaScript调用,并将其放入回调中
document.getElementById('<%= btnClick.ClientID').click();
标签:return-value,telerik,postback,asp-net,javascript 来源: https://codeday.me/bug/20191106/2001874.html