如果某個一級評分項包含評分子項,則點擊該評分項時,再彈出一個新窗口,新窗體中列出了當前評分項的所有評分子項列表,供用戶進行操作。用戶操作完成後,點擊“確定”按鈕,則返回到父窗體,在子窗體中所有的操作結果,同時要帶到父窗體中。同時,如果用戶再次點擊該評分項,則在彈出子窗體的同時,要將上次操作的結果綁定到對應的操作項上。
上面描述的例子,就涉及到了一個父子窗體間的數據傳遞。如何實現這一數據傳遞,當然有很多方法。這裡只是記錄一下在這個例子中我使用的方法。我的方法是在子窗體點擊“確定”按鈕時,將操作結果構造成json格式的字符串,通過調用父窗體上的方法:opener.方法(),將json格式數據傳遞到父窗體上。
此例中構造的json數據類似如下格式:
{"MyData":[
{"bh":"111","lx":"1","df":"10","bz":"aaa"},
{"bh":"112","lx":"2","df":"20","bz":"bbb"},
{"bh":"113","lx":"2","df":"30","bz":"ccc"}
]}
此處子項打分需要保持的分別是bh:編號;lx:類型;df:得分;bz:備注。
按照自己的需要,可以再自己增加需要保持的項。構造此json數據可以放在前台,也可以放在後台。
在此例中,我是放置後台的。代碼如下:
復制代碼 代碼如下:
StringBuilder jsonBuilder = new StringBuilder();
jsonBuilder.Append("@{\"");
jsonBuilder.Append("MyData");
jsonBuilder.Append("\":[");
int k = bh.Split(',').Length + 1;
for (int i = 0; i < bh.Split(',').Length; i++)
{
tem += "update KH_PFX set DF = '"+EncriptLib.EncriptLib.EncodeCode(Convert.ToDouble(df.Split(',')[i].ToString().Trim()))+"',";
tem += "BZ = '"+bz.Split(',')[i].ToString().Trim()+"',PFRXM = '"+Session["XM"].ToString()+"',";
tem += "PFRBH = '"+Session["YHBH"].ToString()+"',PFRQ = to_date('"+DateTime.Now.ToShortDateString()+"','yyyy-MM-dd')";
tem += " where BH = '"+bh.Split(',')[i].ToString().Trim()+"'";
tem += "卐"; //此處用此特殊的符號來分隔sql語句
jsonBuilder.Append("{\"bh\":" + "\"" + bh.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"lx\":" + "\"" + lx.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"df\":" + "\"" + df.Split(',')[i].ToString().Trim() + "\"" + ",");
jsonBuilder.Append("\"bz\":" + "\"" + bz.Split(',')[i].ToString().Trim() + "\"" + "},");
}
if(tem != "")
{
jsonBuilder.Remove(jsonBuilder.Length - 1, 1);
jsonBuilder.Append("]");
jsonBuilder.Append("}");
Page.ClientScript.RegisterClientScriptBlock(GetType(), "cg", "<Script>window.close();opener.GetZXDF('zxdf" + Request.QueryString["bh"].ToString() + "','" + parent_df.Text.Trim() + "','" + jsonBuilder.ToString() + "',\"" + tem + "\");</Script>");
}
"@"符號可以防止在jsonBuilder.ToString()後,轉義字符“\”的消失。
調用父窗體的GetZXDF()方法,將json數據傳遞給父窗體。
下面給出子窗體加載時,綁定json數據的代碼
復制代碼 代碼如下:
$(function() {
//加載時獲取json,然後綁定打分結果
var obj = opener.GetJson($("#txt_YCBH").val());
if($.trim(obj) != ""){
obj = "(" + obj + ")";
obj = eval(obj);
var data = obj.MyData;
$.each(data, function(i, n) {
if(n.lx == "1"){
//直接打分類的綁定
$("#lx" + n.bh).siblings("input").eq(0).val(n.df);
$("#lx" + n.bh).siblings("input").eq(1).val(n.df);
$("#lx" + n.bh).parent().parent().next().children().children("textarea").val(n.bz);
}
if(n.lx == "2"){
//選項打分類的綁定
$("#lx" + n.bh).siblings("input:text").eq(1).val(n.df);
$("#lx" + n.bh).siblings("input:checkbox").each(function(){
if($.trim($(this).val()) == $.trim(n.df)){
$(this).attr("checked",true);
}
});
$("#lx" + n.bh).parent().parent().parent().next().children().children("textarea").val(n.bz);
}
});
opener.GetJson()方法是父窗體上用來向子窗體傳遞json數據的方法,代碼如下:
復制代碼 代碼如下:
//通過編號獲取對應評分項的子項打分結果的json字符串
function GetJson(p_bh)
{
//$("#zxdf" + p_bh).siblings("input").eq(1).val()中保存的就是子窗體傳遞給父窗體的json數據
return $("#zxdf" + p_bh).siblings("input").eq(1).val();
}