【问题标题】:Programming Button OnClick Event编程按钮 OnClick 事件
【发布时间】:2013-05-30 10:43:04
【问题描述】:

一旦用户单击页面上的按钮,我正在尝试使方法运行。我创建了一个代码示例来测试它,但它不起作用,虽然这可能是因为我使用的是 MessageBox。

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

这是我正在调用的方法。

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

关于如何正确实现此功能的任何想法?

【问题讨论】:

  • MessageBox.Show 不适用于 asp.net
  • 不太确定答案,但我马上就会知道,如果你做的是对的,你需要将“s”更改为“。更改 @ModController.ShowBox ("Message");@ModController.ShowBox('Message');
  • 啊,我明白了,不过这是一个测试,如果我在点击事件上以这种方式运行一个方法,它是否可以正常工作?
  • 而 's 只是字符语法,它给了我一个错误。

标签: c# asp.net


【解决方案1】:

如果您的意图是将消息传递给客户端并显示一个对话框,您可以这样做:

在您看来,添加以下内容:

@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 可能是某种反模式。至少,它感觉不对劲,甚至认为它工作得很好。

【讨论】:

  • 这确实可行,虽然说我试图在单击按钮时打开一个 OpenFileDialog,它会一样吗?
  • @DezmenCeoSykes 我不确定您要准确完成什么,但我修改了代码示例以处理文件上传。希望这向您展示了一种方法(可能不是最好的)您可以做这样的事情。
【解决方案2】:

看起来您正在使用 Razor 模板。如果是这样,并且您正在使用 MVC,我认为您的做法并不正确。 MVC 不适用于像 ASP.NET 这样的事件系统。在 MVC 中,您向 ACtion 方法发出请求,通常使用 {controller}/{action} 或类似形式的 URL。

你有几个选择:

  1. 为 dblClick 事件设置一个 javascript 事件,并在事件处理程序中向服务器执行 AJAX 请求。

  2. 使用@ActionLink() 并将其设置为按钮样式。

如果您使用 ASP.NET,您可以在发布到服务器之前设置某些 POST 参数,这将告诉 ASP.NET 运行某个事件处理程序。但是,如果您使用的是 ASP.NET,我建议您使用 Web 表单而不是 Razor。我自己从未将 Razor 与 ASP.NET 一起使用,但我认为这两种技术 Jive 不太好。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2020-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多