如何在不更改视图的情况下创建在控制器中调用方法的按钮?

时间:2016-05-12 12:38:31

标签: c# asp.net-mvc model-view-controller

我有一个ActionLink,我想在我的控制器中调用我的方法但是我不希望它改变视图。 ActionLink会向控制器发送一个ID,但它会尝试访问一个不存在的视图。我需要链接来触发我的方法但不尝试更改视图,我也不希望它在地址栏中显示路径信息。

这是按钮,它有标签文本,它需要调用的方法和控制器名称。如你所见,最后还有一个ID(##代表剑道)

@Html.ActionLink("Prompt", "buttonPrompt", "Home", new { id= "/#=vessel_idx# "}, null)

当我点击该链接时,它会尝试访问该视图(该视图不存在)

/Home/buttonPrompt/id

这是控制器

public void buttonPrompt(int? id)
{
    .. my code ....
}

所以我需要知道如何在不改变视图或在浏览器的地址栏中显示路径信息的情况下调用我的buttonPrompt方法。这是可能的还是我的做法错了?

3 个答案:

答案 0 :(得分:1)

试试这个:

查看页面代码:

<input type="button" id="yourBtn" value="Click Me!" />

使用Javascript:

<script type="text/javascript">
    $("#yourBtn").click(function(){
        var id = **YourIntValue**
        $.ajax({
            url: "@Url.Action("ButtonPrompt","Home")",
            type: "GET",
            data: { id: id },
            dataType: 'json',
            cache: false,
            error: function(XMLHttpRequest, textStatus, errorThrown)  {
                alert("Error" + errorThrown)
            },
            success: function(data){
                //Do nothing
            }
        });
    });

控制器:

public ActionResult ButtonPrompt(int? id)
{
    .. your code ....
    return Json(true);
}

答案 1 :(得分:0)

这是可能的。目前您正在进行GET请求,这意味着参数在url中设置。你应该发一个帖子请求,这会再次使页面重新加载,但会将你的参数放在http上下文的请求体中。您可以在MVC中阅读有关表单发布的信息,还可以查看这个相当简短的示例:https://blog.michaelckennedy.net/2012/01/20/building-asp-net-mvc-forms-with-razor/

答案 2 :(得分:0)

您应该使用AJAX来调用控制器操作(方法)。首先,请为您的链接指定一个类似于&#39; btnPrompt&#39;:

的ID
@Html.ActionLink("Prompt", "buttonPrompt", "Home", new { id= "/#=vessel_idx# "}, htmlAttributes: new { id = "btnPrompt" })

其次,使用jQuery对动作进行ajax调用:

$('#btnPrompt').click(function(e) {
    e.preventDefault(); 

    var href = $(this).attr('href'); // this gives you /Home/buttonPrompt/123

    $.ajax({
        url: href,
        type: 'GET',
        success: function (data) {
            // do nothing here, unless you're returning JSON from your action
        }
    });
});

e.preventDefault();行阻止您的链接实际关注href(或者#34;更改视图&#34;,因为您调用它)。