如何強迫指定RedirectToAction 為POST
1个回答
2015-05-04 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517192
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
问题在於你在 View 里所使用的 $.post(),你要先了解 jQuery 的 $.post() 是做什麼样的用途,
jQuery.post()
$.post() 同於 $.Ajax({ type: 'POST', .......... });
是把资料从前端 POST 到後端,然後再将後端所处理後所传回的资料再传给 callback 所指定的方法,
而你所想要达成点击 button 之後再转到其他 controller 的 action,你的处理方式就不对了,
1.
首先,你要先养成一个习惯,不要在 HTML Tag 中直接指定事件,也就是要用 unobtrusive (非侵入式 or 谦卑式) 的写法,可以改写成如下:
<input type ="button" id ="x" value="click" />
<script type="text/javascript">
$(document).ready(function () {
$('#x').click(ChanageAction);
});
function ChanageAction() {
$.post('@Url.Action("ChangeAction", "Home")');
}
</script>
2.
再来就是如果你只是要做一个单纯的按下 button 後就转移到另一个 controller 的 action 所呈现的 View,
其实不必使用 $.post(),也不用在自己本身的 controller 去另外建立一个用来转页的 action 方法,
可以用下的方式:
<script type="text/javascript">
$(document).ready(function () {
$('#x').click(ChanageAction);
});
function ChanageAction() {
location.href = '@Url.Action("Index", "B")';
}
</script>
3.
如果真的要从前端 POST 送资料到後端,记得在 Controller 的 Action 方法上方标注 [HttpPost] 的 Attribute
4.
另外,有时候除了对 Controller 的程式做中断侦错之外,因为有在 View 中使用 Javascript 程式,
所以也需要另外针对前端的 Javascript 程式做中断处理,
很多时候後端程式没有错误的情况下,大多会是前端的 javascript 程式有可能发生问题,
而前端 javascript 的侦错,在目前的主流浏览器都有提供 Developer Tools,可以用来侦错前端 javascript 程式,
可以参考以下各浏览器的 Developer Tools 的介绍:
各主要浏览器的开发者工具( Developer Tool ) Part.1 - Firefox
各主要浏览器的开发者工具( Developer Tool ) Part.2 - IE
各主要浏览器的开发者工具( Developer Tool ) Part.4 - WebKit
因为 Opera 已经宣布将采用 Webkit,所以就不提供 Opera 的 Developer Tool 介绍(其实上面的系列文章中 Part.3 就是介绍 Opera 的 Dragonfly)
另外补充,我用 Firefox 的 firebug 来观察前端,这边是用你原本一开始的写法,前端 button 按下去後有 post 到後端,
而後端也有把 RedirectToAction 後的资料传送回前端,但因为前端 $.post() 并没有指定 callback 来处理回传的资料,所以页面是没有任何变化,
jQuery.post()
$.post() 同於 $.Ajax({ type: 'POST', .......... });
是把资料从前端 POST 到後端,然後再将後端所处理後所传回的资料再传给 callback 所指定的方法,
而你所想要达成点击 button 之後再转到其他 controller 的 action,你的处理方式就不对了,
1.
首先,你要先养成一个习惯,不要在 HTML Tag 中直接指定事件,也就是要用 unobtrusive (非侵入式 or 谦卑式) 的写法,可以改写成如下:
<input type ="button" id ="x" value="click" />
<script type="text/javascript">
$(document).ready(function () {
$('#x').click(ChanageAction);
});
function ChanageAction() {
$.post('@Url.Action("ChangeAction", "Home")');
}
</script>
2.
再来就是如果你只是要做一个单纯的按下 button 後就转移到另一个 controller 的 action 所呈现的 View,
其实不必使用 $.post(),也不用在自己本身的 controller 去另外建立一个用来转页的 action 方法,
可以用下的方式:
<script type="text/javascript">
$(document).ready(function () {
$('#x').click(ChanageAction);
});
function ChanageAction() {
location.href = '@Url.Action("Index", "B")';
}
</script>
3.
如果真的要从前端 POST 送资料到後端,记得在 Controller 的 Action 方法上方标注 [HttpPost] 的 Attribute
4.
另外,有时候除了对 Controller 的程式做中断侦错之外,因为有在 View 中使用 Javascript 程式,
所以也需要另外针对前端的 Javascript 程式做中断处理,
很多时候後端程式没有错误的情况下,大多会是前端的 javascript 程式有可能发生问题,
而前端 javascript 的侦错,在目前的主流浏览器都有提供 Developer Tools,可以用来侦错前端 javascript 程式,
可以参考以下各浏览器的 Developer Tools 的介绍:
各主要浏览器的开发者工具( Developer Tool ) Part.1 - Firefox
各主要浏览器的开发者工具( Developer Tool ) Part.2 - IE
各主要浏览器的开发者工具( Developer Tool ) Part.4 - WebKit
因为 Opera 已经宣布将采用 Webkit,所以就不提供 Opera 的 Developer Tool 介绍(其实上面的系列文章中 Part.3 就是介绍 Opera 的 Dragonfly)
另外补充,我用 Firefox 的 firebug 来观察前端,这边是用你原本一开始的写法,前端 button 按下去後有 post 到後端,
而後端也有把 RedirectToAction 後的资料传送回前端,但因为前端 $.post() 并没有指定 callback 来处理回传的资料,所以页面是没有任何变化,
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询