如何使用按钮(非提交)单击事件来调用控制器上的方法?

Ref*_*din 3 asp.net-mvc

问这个问题我觉得很可笑,但在这里,我正在尝试制作一个非常简单的 ASP.NET MVC 5 应用程序。我的第一个善良。我想要一个按钮,当单击它时会执行某些操作但不会更改用户的视图或最多返回“电子邮件已提交”消息。

我的问题是我不知道如何将按钮连接到不改变视图(即使用@Html.ActionLink())或提交按钮的“事件”或“动作” 。我找到的每个示例也是提交按钮。

谢谢你的帮助。

编辑

这仍然对我不起作用。我将在下面发布我的代码。我的努力是基于这里所说的和链接的帖子。另外,仅供参考,我可以使用`@Html.ActionLink("link text", "actionname") 使其工作,但它显示为链接,我正在尝试使用“按钮”。

索引.cshtml

@{
    ViewBag.Title = "Home Page";  
}

<div class="hero-unit">
    <h3>Marketing & Communications Project Request Form</h3>   
    <p>User: <strong>@Context.User.Identity.Name</strong></p> 
</div>
<div class="row">
    <div class="span4">
        @Html.ActionLink("Send Email", "SendEmail") @*this line works*@
        <input id="SendEmail" class="btn" type="button" value="SendEmail" /> @*this line does not

    </div>
</div>

<script type="text\javascript">
    $(function(){
        var url = '@Url.Action("SendEmail", "HomeController")';
        $("input#SendEmail").on('click', function() {                
            $.ajax({
                url: url    
            })
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

家庭控制器

public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

        public ActionResult SendEmail()
        {
            //Code to create and send email here

            return View("Index");
        }
    }
Run Code Online (Sandbox Code Playgroud)

Jas*_*ans 5

好的,假设您有以下按钮,用 HTML 编写:

<input type="button" id="MyButton" value="Click Me />
Run Code Online (Sandbox Code Playgroud)

您可以使用 jQuery 来连接click事件:

$(function(){
    $("input#MyButton").on('click', function(){
    // Do what you want.
    });
});
Run Code Online (Sandbox Code Playgroud)

如果您使用 HTML 助手,例如HTML.TextBoxFor(),只要您知道input生成的 id ,您就可以使用相同的 jQuery 代码来连接click事件。

编辑:

您可以将该 jQuery 代码放置在视图中,例如

<script type="text/javascript">
    $(function(){
        $("input#MyButton").on('click', function(){
        // Do what you want.
        });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

通常您会发现脚本代码放置在视图底部附近,但您可以将其放置在您真正喜欢的任何位置。

或者,您可以将该 jQuery 放在单独的 JavaScript (*.js) 文件中。只需确保将以下内容添加到 中的<head>部分_Layout.cshtml

<script type='text/javascript' src='@Url.Content("~Scripts/YourFile.js")' ></script>

_Layout.cshtml 是在您的项目中使用的主布局文件(假设您在 Visual Studio 中选择了常用的 ASP.NET MVC 项目模板之一)。

编辑:

关于 jQuery 参考,_Layout.cshtml如果尚未引用jQuery,您可以添加它:

<script type='text/javascript' src='@Url.Content("~Scripts/jquery.version.js")' ></script>

只需将文件名替换为您拥有的正确文件名。现在,如果您的 MVC 应用程序使用捆绑,事情就会变得有趣。这有点超出我的知识库,所以最好看看其他关于 MVC 应用程序中的 CSS/JavaScript 捆绑的 SO 问题。