2013-05-29 215 views
1

我試圖讓一個方法運行一次用戶單擊頁面上的按鈕。我創建了一個代碼樣本來測試它,但它不起作用,儘管它可能是因爲我正在使用MessageBox。編程按鈕OnClick事件

<input id="upload-button" type="button" ondblclick="@ModController.ShowBox("Message");" value="Upload"/><br /> 

這是我調用的方法。

public static DialogResult ShowBox(string message) 
{ 
    return MessageBox.Show(message); 
} 

任何想法,我如何才能使這個功能正常?

+5

MessageBox.Show不適用於asp.net –

+0

不太確定答案,但是我馬上就會知道,如果你所做的是正確的,那麼你需要將「s」改爲「。 @ ModController.ShowBox(「Message」); ** to ** @ ModController.ShowBox('Message'); ** – Jieqin

+0

啊,我明白了,然而這是一個測試,就像我在click事件上這樣運行一個方法,它是否正常工作? –

回答

2

你可以做這樣的事情,如果你的目的是傳遞一個信息給客戶端,並顯示一個對話框:

在您看來,添加以下內容:

@using (Html.BeginForm("ShowBox","Home",FormMethod.Post, new { enctype = "multipart/form-data" })){ 
    @Html.Hidden("message", "Your file has uploaded successfully."); 
    <input id="upload-button" type="submit" value="Click Me" /> 
    <input id="file" name="file" type="file" value="Browse"/> 
} 

然後在你的控制器:

[HttpPost] 
public ActionResult ShowBox(string message, HttpPostedFileBase file) 
{ 
    if (file == null || file.ContentLength == 0) 
    { 
     //override the message sent from the view 
     message = "You did not specify a valid file to upload"; 
    } 
    else 
    { 
     var fileName = Path.GetFileName(file.FileName); 
     var path = Path.Combine(Server.MapPath("~/App_Data/Uploads")); 
     file.SaveAs(path); 
    } 

    System.Text.StringBuilder response = new System.Text.StringBuilder(); 
    response.Append("<script language='javascript' type='text/javascript'>"); 
    response.Append(string.Format(" alert('{0}');", message)); 
    response.Append(" var uploader = document.getElementById('upload-button'); "); 
    response.Append(" window.location.href = '/Home/Index/';"); 
    response.Append("</script>"); 

    return Content(response.ToString()); 
} 

注: 我覺得這種做法是不太理想。我非常確定,從控制器直接返回JavaScript可能是某種反模式。至少,它感覺不對,甚至認爲它工作得很好。

+0

這確實會工作,雖然說我試圖打開一個OpenFileDialog的按鈕點擊,它會工作只是相同? –

+0

@DezmenCeoSykes我不確定你想要完成什麼,但我修改了代碼示例以處理文件上傳。希望這會向你展示一種方法(可能不是最好的)你可以做這樣的事情。 – codechurn

1

它看起來像你使用剃刀模板。如果是這樣,並且您正在使用MVC,我認爲您沒有接近這個權利。 MVC不適用於像ASP.NET這樣的事件系統。在MVC中,你需要一個ACtion方法,通常使用{controller}/{action}形式的URL或類似的東西。

您有幾種選擇:

  1. 設置爲DblClick事件JavaScript事件,並執行AJAX請求,在事件處理程序服務器。

  2. 使用@ActionLink()並使其看起來像一個按鈕。

如果您使用ASP.NET,在發佈到服務器之前可以設置某些POST參數,這會告訴ASP.NET運行某個事件處理程序。但是,如果您使用的是ASP.NET,我建議使用Web表單而不是Razor。我從來沒有使用過ASP.NET的Razor,但我不認爲這兩種技術很好。