我试图在用户点击页面上的按钮后运行方法。我创建了一个代码示例来测试它,但它不起作用,虽然可能是因为我正在使用MessageBox。
<input id="upload-button" type="button" ondblclick="@ModController.ShowBox("Message");" value="Upload"/><br />
这是我正在调用的方法。
public static DialogResult ShowBox(string message)
{
return MessageBox.Show(message);
}
关于如何正确使用此功能的任何想法?
答案 0 :(得分: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可能是某种反模式。至少,它感觉不对,即使它认为它运作得很好。
答案 1 :(得分:1)
看起来你正在使用Razor模板。如果是这样,并且你正在使用MVC,我认为你没有接近这个权利。 MVC不适用于像ASP.NET这样的事件系统。在MVC中,您需要对ACtion方法进行请求,通常使用{controller} / {action}形式的URL,或类似的方式。
你几乎没有选择:
为dblClick事件设置javascript事件,并在事件处理程序中对服务器执行AJAX请求。
使用@ActionLink()并将其样式设置为按钮。
如果您使用的是ASP.NET,则可以在发布到服务器之前设置某些POST参数,这将告诉ASP.NET运行某个事件处理程序。但是,如果您使用的是ASP.NET,我建议您使用Web表单而不是Razor。我自己从未使用过Razor和ASP.NET,但我认为这两种技术并不是很好。