单击有/无回发的MVC调用方法

时间:2014-01-27 07:14:44

标签: c# asp.net-mvc postback asp.net-mvc-5 actionlink

我对视图中的调用方法有疑问。

基本上我认为我有两个链接:

1链接:当我点击它时,应该调用并执行一些方法,但网页上不应该有任何改变,所以没有回发。

2链接:当我点击它时,某些方法应该发生并且可以在同一页面上进行回发

在控制器中我有:

public ActionResult FirstMethod(){ return View();}
public ActionResult SecondMethod(){ return View();}

在视图中:

@Html.ActionLink("Action 1", "FirstMethod", "Controller");
@Html.ActionLink("Action 2", "SecondMethod", "Controller");

所以,当我点击这两个动作时,但我得到一个错误,说找不到FirstMethod.chtml ..

那么有可能有一个回发方法而另一个方法没有吗?以及如何返回同一页面...而不是试图获得FirstMethod.chtml ..

4 个答案:

答案 0 :(得分:6)

以下解决方案基于AJAX -

控制器 -

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

        [HttpGet]
        public ActionResult CallMe()
        {
            return new ContentResult() { Content = "This is Demo " };
        }
}

Index.cshtml -

<h2>Index</h2>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#Click").click(function () {
            $.ajax({
                url: "/Demo/CallMe",
                type: "GET",
            error: function (response) {
                    alert(response);
            },
            success: function (response) {
                alert(response);
            }
        });
        });
    })
</script>

<input type="button" value="Click" id="Click" />

首先导航到/ demo / Index,它将在页面中显示带有上述标记的页面。当我们点击点击按钮时,我们有 -

enter image description here

答案 1 :(得分:0)

@Html.ActionLink方法基本上只是将你转发到指定的控制器动作,你不能改变它,因为这是方法的目的。

您必须处理单击客户端,并将特定操作绑定到它(将一些数据发布到URL,之后不执行任何操作)。一种相当简单的方法是使用jQuery.Post

以上jquery链接的示例。

  

示例:请求test.php页面,但忽略返回结果。

     

$.post("test.php");

答案 2 :(得分:0)

实际上,asp.net mvc中没有回发概念。与服务器的所有交互都应该通过控制器/操作。

@ Html.ActionLink()方法只生成一个链接(在html中标记一个)并且什么都不做。一切都发生在您发送请求(例如单击链接)到控制器/操作后,如果您在单击链接时不想做任何事情,您最好使用这样的AJAX方法

@Html.ActionLink("Action 1", "FirstMethod", "Controller", null/*routeValues*/, new { id = "link1Id" });
<script type="text/javascript">
$(function () {
    $("#link1Id").click(function () {
        $.get("/Contoller/FirstMethod", function () {
            //do nothing or alert(something)
        });
        return false;
    });
})
</script>

答案 3 :(得分:0)

在控制器操作中完成所需操作后,您只需返回另一个视图:

public ActionResult SecondMethod()
{
    //do something    
    return View("FirstMethod");
}

在你看到这个之后,你很可能会厌恶使用魔术字符串来引用视图或控制器,这种厌恶是完全可以理解的:)

然后你应该看看像T4MVC这样的东西是否适合你的需要。