我們做了一個功能,顯示了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按鈕,如果是這樣調用委託函數
我會考慮切換到Silverlight和溝內嵌的那樣可怕可怕的牆JS – Alex
@alex我們更喜歡使用從功能包含JavaScript或AJAX,而不是使用運行時 – VSP