FineUI 官方论坛
标题:
如何从弹出窗口传多个值呢?
[打印本页]
作者:
shouzhi2007
时间:
2014-4-17 22:12
标题:
如何从弹出窗口传多个值呢?
如何从窗口页面里传多个值呢?
如下图
作者:
狐狸猫
时间:
2014-4-18 07:53
建议你看一下 这几个地方 :1、在主界面加载要弹出的新窗口 那个位置的代码;2、新窗口的grid的DataKeyNames和隐藏
作者:
gdcrx
时间:
2014-4-18 11:25
1、从你截图看,感觉你返回选择对象的ID就可以,然后在父窗口根据返回的ID重新读一次数据库。
2、如果你不想多读一次数据库,可以将选择的对象序列化返回,然后在父窗口再反序列化回对象实例。
/// <summary>
/// 返回选择客户ID
/// </summary>
/// <param name="index"></param>
private void PostBackSelectID(int index)
{
object[] keys = gdData.DataKeys[index];
int id = Convert.ToInt32(keys[0]);
string name = Convert.ToString(keys[1]);
string encode = JsonHelper.GetJson<Customer>(new Customer() { ID = id, Name = name });
//string encode = Server.UrlEncode(jb.ToString());
PageContext.RegisterStartupScript(ActiveWindow.GetHidePostBackReference(string.Format("Customer${0}",encode)));
}
复制代码
public static class JsonHelper
{
/// <summary>
/// 生成Json格式
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static string GetJson<T>(T obj)
{
DataContractJsonSerializer json = new DataContractJsonSerializer(obj.GetType());
using (MemoryStream stream = new MemoryStream())
{
json.WriteObject(stream, obj);
string szJson = Encoding.UTF8.GetString(stream.ToArray()); return szJson;
}
}
/// <summary>
/// 获取Json的Model
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="jsonString"></param>
/// <returns></returns>
public static T ParseFromJson<T>(this string jsonString)
{
if (string.IsNullOrEmpty(jsonString)) return default(T);
T obj = Activator.CreateInstance<T>();
using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString)))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
return (T)serializer.ReadObject(ms);
}
}
public static string ToJson(this object obj)
{
return JsonConvert.SerializeObject(obj);
}
public static T FromJson<T>(this string jsonString)
{
return JsonConvert.DeserializeObject<T>(jsonString);
}
}
复制代码
作者:
shouzhi2007
时间:
2014-4-18 22:40
gdcrx 发表于 2014-4-18 11:25
1、从你截图看,感觉你返回选择对象的ID就可以,然后在父窗口根据返回的ID重新读一次数据库。
2、如果你不 ...
谢谢了
作者:
shouzhi2007
时间:
2014-4-18 22:45
本帖最后由 shouzhi2007 于 2014-4-18 22:48 编辑
不过我昨天,研究出来了。用数组传的。
用GetWriteBackValueReference ,多传几个值就可以了。
这是传值代码:
protected void btnSaveClose_Click(object sender, EventArgs e)
{
SyncSelectedRowIndexArrayToHiddenField();
int selectedRowIndex = Grid1.SelectedRowIndex;
string SparepartsID = Grid1.DataKeys[selectedRowIndex][0].ToString();
string SparepartsBianhao = Grid1.DataKeys[selectedRowIndex][1].ToString();
string SparepartsCode = Grid1.DataKeys[selectedRowIndex][2].ToString();
string SparepartsName = Grid1.DataKeys[selectedRowIndex][3].ToString();
string SparepartsSpecification = Grid1.DataKeys[selectedRowIndex][4].ToString();
string Sparepartsprice = Grid1.DataKeys[selectedRowIndex][5].ToString();
PageContext.RegisterStartupScript(ActiveWindow.GetWriteBackValueReference(SparepartsID, SparepartsBianhao, SparepartsCode, SparepartsName, SparepartsSpecification,Sparepartsprice)
+ ActiveWindow.GetHideReference());
}
复制代码
这是接受值代码:
private void InitEquipmentSparepart()
{
// 打开编辑窗口
string selectSparepartURL = String.Format("./Spareparts_select_bianhao.aspx?ids=<script>{0}</script>", hfSelectedSparepart.GetValueReference());
tbSelectedKcBianhao.OnClientTriggerClick = Window1.GetSaveStateReference(hfSelectedSparepart.ClientID, tbSelectedKcBianhao.ClientID, tbxKcCode.ClientID, tbxKcName.ClientID, tbxKcSpecification.ClientID, nbbKcPrice.ClientID)
+ Window1.GetShowReference(selectSparepartURL, "选择设备名称");
}
复制代码
欢迎光临 FineUI 官方论坛 (https://fineui.com/BBS/)
Powered by Discuz! X3.4