通过javascript从控制器视图调用不同的控制器操作
我有一个家庭控制器,它的视图有一个按钮。我想在单击按钮时调用名为SearchSpace的控制器通过javascript从控制器视图调用不同的控制器操作,javascript,ajax,asp.net-mvc-4,Javascript,Ajax,Asp.net Mvc 4,我有一个家庭控制器,它的视图有一个按钮。我想在单击按钮时调用名为SearchSpace的控制器 <script type="text/javascript"> var data = { "id": "1" } function search() { alert("hello" + JSON.stringify(data)); $.ajax({ url: '/SearchSpace/searchS
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
视图:
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
路由配置
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
警报正在呼叫,但未移动到SearchSpace Controller。。
请帮帮我。试试这个
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
<button id="click"><a href="/Home/About">Click me</a>
</button>
问题在于预期的数据类型是
jQuery.ajax()
,因为您使用json
分配dataType
属性。发件人:
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
数据类型(默认值:智能猜测(xml、json、脚本或html))
类型:字符串
期望从服务器返回的数据类型。如果未指定,jQuery将尝试根据响应的MIME类型推断它(XML MIME类型将生成XML,在1.4中JSON将生成JavaScript对象,在1.4中脚本将执行脚本,其他任何内容都将作为字符串返回)。可用的类型(以及作为成功回调的第一个参数传递的结果)有:
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
…“json”:将响应计算为json并返回一个JavaScript对象。JSON数据被严格解析;任何格式错误的JSON都将被拒绝,并引发解析错误。从jQuery1.9开始,空响应也被拒绝;服务器应该返回null或{}响应。(有关正确json格式的更多信息,请参见json.org。)
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
至少有两种方法可以解决此问题:
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
首先,省略dataType
属性:
<script type="text/javascript">
var data = { "id": "1" }
function search() {
alert("hello" + JSON.stringify(data));
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
dataType: "json",
contentType: 'application/json',
data: JSON.stringify(data),
success: function (returnPayload) {
console && console.log("request succeeded");
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
}
</script>
$.ajax({
url: '/SearchSpace/searchSpace',
type: 'POST',
contentType: 'application/json',
//dataType: "json", << delete this line or comment it
data: JSON.stringify(data),
success: function (data) {
console && console.log(data);
},
error: function (xhr, ajaxOptions, thrownError) {
console && console.log("request failed");
}
});
“不动”是什么意思?您的错误函数是否被调用?没有显示错误消息。移动意味着调用该控制器操作在ajax调用后您是否尝试过警报?在
searchSpace
控制器中是否有action处理http post请求?如果是这样的话,如果你给我们看那个动作方法会更好。同样,如果你给我们看RouteConfig
类也会更好。试过这个。但没有发现错误。我试过了,上面的代码,它创建了按钮,一旦你点击它就会重定向到关于我们的页面,如果你传递了根符号,你也需要传递tht页面的扩展名。更好地使用控制器/视图名称我尝试了这两种方法,但无法调用控制器操作method@Wasfa你试过调试你的代码吗?将制动点添加到动作方法中,然后查看是否在单击按钮后调用了该动作方法。