2012-06-05 43 views
6

我們做了一個功能,顯示了modalpopupmessage動態地從C#通過JavaScript,它工作正常,但我們想添加一個參數,所以我們可以通過一個函數委託(或事件處理程序),如果用戶按下「確定」按鈕將被調用。有什麼建議麼?ASP.NET C#修復

POSTDATA:我們不想典型的「確認要按下此按鈕」解決方案,但功能要求確認的過程中,如果有必要的任何部分。例如:用戶點擊刪除項目按鈕,在代碼隱藏你檢查項目有一定的依賴性,所以顯示帶有mensaje函數的確認消息通過委託deleteitemconfirmed(),如果用戶點擊確定調用委託...

Function在庫:

public static void Mensaje(string mensaje, EventHandler EventoClickLLamar, bool botoncancelar, string cssclass, Color colorfondo) 
{ 
    string colorfondox = ColorTranslator.ToHtml(colorfondo); 

    string idbotonok = EventoClickLLamar == null ? "" : EventoClickLLamar.Method.Name.Replace("_Click", ""); 
    string script = 
     " function verifyStyle(selector) {" + " \r\n" + 
     " var rules;" + " \r\n" + 
     " var haveRule = false;" + " \r\n" + 
     "     " + " \r\n" + 
     " if (typeof document.styleSheets != \"undefined\") { //is this supported" + " \r\n" + 
     "  var cssSheets = document.styleSheets;" + " \r\n" + 
     "  " + " \r\n" + 
     "  outerloop:" + " \r\n" + 
     "  for (var i = 0; i < cssSheets.length; i++) {" + " \r\n" + 
     "   " + " \r\n" + 
     "   //using IE or FireFox/Standards Compliant" + " \r\n" + 
     "   rules = (typeof cssSheets[i].cssRules != \"undefined\") ? cssSheets[i].cssRules : cssSheets[i].rules;" + 
     " \r\n" + 
     "   " + " \r\n" + 
     "   for (var j = 0; j < rules.length; j++) {" + " \r\n" + 
     "    if (rules[j].selectorText == selector) {" + " \r\n" + 
     "      haveRule = true;" + " \r\n" + 
     "      break outerloop;" + " \r\n" + 
     "    }" + " \r\n" + 
     "   }//innerloop" + " \r\n" + 
     "   " + " \r\n" + 
     "  }//outer loop" + " \r\n" + 
     " }//endif" + " \r\n" + 
     " " + " \r\n" + 
     "  return haveRule;" + " \r\n" + 
     " }//eof" + " \r\n" + 

     " function setFading(o, b, e, d, f) {" + " \r\n" + 
     " var t = setInterval" + " \r\n" + 
     "   (" + " \r\n" + 
     "   function() {" + " \r\n" + 
     "    b = stepFX(b, e, 2);" + " \r\n" + 
     "    setOpacity(o, b/100);" + " \r\n" + 
     "    if (b == e) {" + " \r\n" + 
     "     if (t) { clearInterval(t); t = null; }" + " \r\n" + 
     "     if (typeof f == 'function') { f(); }" + " \r\n" + 
     "    }" + " \r\n" + 
     "   }" + " \r\n" + 
     "   , d/50);" + " \r\n" + 
     " }" + " \r\n" + 
     " function setOpacity(e, o) {" + " \r\n" + 
     " // for IE" + " \r\n" + 
     " e.style.filter = 'alpha(opacity=' + o * 100 + ')';" + " \r\n" + 
     " // for others" + " \r\n" + 
     " e.style.opacity = o;" + " \r\n" + 
     " }" + " \r\n" + 
     " function stepFX(b, e, s) {" + " \r\n" + 
     " return b > e ? b - s > e ? b - s : e : b < e ? b + s < e ? b + s : e : b;" + " \r\n" + 
     " }" + " \r\n" + 

     " // we may consider adding frames support" + " \r\n" + 
     " var w = window;" + " \r\n" + 
     " // shortcut to document" + " \r\n" + 
     " var d = w.document;" + " \r\n" + 
     " // canvas, window width and window height" + " \r\n" + 
     " var r = d.documentElement;" + " \r\n" + 
     " var ww = w.innerWidth ? w.innerWidth + w.pageXOffset : r.clientWidth + r.scrollLeft;" + " \r\n" + 
     " var wh = w.innerHeight ? w.innerHeight + w.pageYOffset : r.clientHeight + r.scrollTop;" + " \r\n" + 
     " // create a block element" + " \r\n" + 
     " var b = d.createElement('div');" + " \r\n" + 
     " b.id = 'Message';" + " \r\n" + 
     " b.className = '" + cssclass + "' || '';" + " \r\n" + 
     " b.style.cssText = 'top:-9999px;left:-9999px;position:absolute;white-space:nowrap;z-index: 1001;';" + 
     " \r\n" + 
     " // classname not passed, set defaults" + " \r\n" + 
     " if (!verifyStyle(\"." + cssclass + "\")) {" + " \r\n" + 
     " b.style.margin = '0px 0px';" + " \r\n" + 
     " b.style.padding = '8px 8px';" + " \r\n" + 
     " b.style.border = '1px solid #A4BED0';" + " \r\n" + 
     " b.style.backgroundColor = '#E0ECF1';" + " \r\n" + 
     " }" + " \r\n" + 
     " var bx = d.createElement('div');" + " \r\n" + 
     " bx.style.cssText = 'position: absolute;left:0px;top:0px;width:100%;height:100%;text-align:center;z-index: 1000;background-color: " + //va seguido sin salto 
     colorfondox + ";opacity:0.5;filter:alpha(opacity=50);'" + " \r\n" + 
     " d.body.insertBefore(bx, d.body.firstChild);" + " \r\n" + 
     " d.body.insertBefore(b, d.body.firstChild); " + " \r\n" + 
     " // write HTML fragment to it " + " \r\n" + 
     " b.innerHTML = '<table><tr><td>" + mensaje + "</td></tr><tr><td align=\"center\">" + 

     (string.IsNullOrEmpty(idbotonok) 
     ? "<input type=\"submit\" value=\"Aceptar\" onClick=\"disabled=true;setFading(b, 100, 0, 1000, function() { d.body.removeChild(bx); d.body.removeChild(b); });\" >" 
     : "<input type=\"submit\" value=\"Aceptar\" onClick=\"__doPostBack(\\'" + idbotonok + "\\',\\'\\')\" id=\"" + idbotonok + "\" >") + 

     (botoncancelar 
     ? "<input type=\"submit\" value=\"Cancelar\" onClick=\"disabled=true;setFading(b, 100, 0, 1000, function() { d.body.removeChild(bx); d.body.removeChild(b); });\" >" 
     : "") + 

     "</td></tr></table>';" + " \r\n" + 
     " // save width/height before hiding " + " \r\n" + 
     " var bw = b.offsetWidth;" + " \r\n" + 
     " var bh = b.offsetHeight;" + " \r\n" + 
     " // hide, move and then show" + " \r\n" + 
     " b.style.display = 'none';" + " \r\n" + 
     " b.style.top = (wh/2 - bh/2) + 'px'; //center" + " \r\n" + 
     " b.style.left = (ww/2 - bw/2) + 'px'; //center" + " \r\n" + 
     " b.style.display = 'block';" + " \r\n"; 

    ScriptManager.RegisterClientScriptBlock((Page)HttpContext.Current.Handler, typeof(Page), "mensaje", script, true); 
} 

測試頁:

public partial class Test: Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    } 

    btnDeleteItem_Click(object sender, EventArgs e) 
    { 
     //DB checks 
     .... 
     .... 
     //After x checks against Database we see the item has some dependency so we ask for confirmation 
     FunctionsLibrary.Mensaje("This Item has x dependency, are you sure you want to delete it?", btnDeleteItemConfirmed_Click, true, "cssclassx", System.Drawing.Color.Gray); 
    } 

    btnDeleteItemConfirmed_Click(object sender, EventArgs e) 
    { 
     //delete item definitively, handle dependencies etc... 
    } 
} 

選項,我們不可能讓工作(如果我們的軌道上,但什麼是錯):

  • 案例1 :(在我們的示例代碼中實現的一個)使用EventHandler + __doPostBack,因此如果您在頁面中定義了buttonid_click,它將在回發時調用。 (事件沒有崛起......我們假設這是因爲我們沒有在頁面加載中添加Ok控件...這給了我們案例2)

  • 案例2:保存委託函數通過,註冊事件頁面.Load + = GetPostBackControlID(),在以下頁面加載GetPostBackControlID()被調用,還有我們檢查,如果點擊控件的ID是我們的OK按鈕,如果是這樣調用委託函數

+0

我會考慮切換到Silverlight和溝內嵌的那樣可怕可怕的牆JS – Alex

+0

@alex我們更喜歡使用從功能包含JavaScript或AJAX,而不是使用運行時 – VSP

回答

3

所以,你想跟Javascript對話框中的代碼隱藏?最好的解決方案是使用Ajax。看看它是如何完成的:http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/

請記住,您將在代碼隱藏中調用靜態方法,因此並非頁面中的所有數據都可用。你可以儘管例如通過HttpCurrent對象訪問會話對象。

祝你好運。

+0

謝謝你,是的,我們要指向一個特定的功能將被調用的情況下,用戶點擊OK按鈕(此功能將作爲傳遞參數消息()函數),例如:消息( 「做點什麼?」,DoSomethingFunctionPointer); 此解決方案的問題: - 傳遞的方法必須是靜態方法和webmethod(記住消息函數在其他庫中將被使用) - 頁面ScriptManager必須將EnablePageMethods屬性設置爲true或程序員必須包含jquery引用來使用這個函數 – VSP

0

檢查的關係是不成立後,將作爲btnDeleteItem.OnClick btnDeleteItem.OnClick +=btnDeleteItemConfirmed_Click 並設置btnDeleteItem.OnClientClick OnClientClick="return confirm('Are you sure you want to delete this item?');"

月這可以幫助你