我对视图中的调用方法有疑问。
基本上我认为我有两个链接:
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 ..
答案 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,它将在页面中显示带有上述标记的页面。当我们点击点击按钮时,我们有 -
答案 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这样的东西是否适合你的需要。