通过AJAX调用时,控制器操作不会执行

时间:2015-04-08 08:08:31

标签: javascript jquery asp.net-mvc-4

我有两个名为Contact and About的HttpPost控制器操作。我有一个JavaScript函数,它将相关的表单属性(它的动作,方法等)转换为AJAX请求,然后使用返回值/响应执行某些操作。

但是,当我调用JavaScript函数时,只运行JavaScript部分并且不调用MVC服务器端代码。

有人可以帮忙吗?

联系

[HttpPost]         
public string Contact(string id)
{
    return "OK";
}

关于

[HttpPost]
public string About(string id)
{
    return "OK2";
}

脚本

 $('form').submit(function () {
    if ($(this).valid()) {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (result) {
                $('#myForm').html('');
                $('#result').html(result);
            }
        });
    }
    return false;
});

});

1 个答案:

答案 0 :(得分:0)

假设以下情况,因为问题没有提到具体细节......

我想象你的网页有点像这样结构:

<body>
   <form action="/Home/About" method="POST">
     <input type="hidden" name="id" value="1">
     <button type="submit">About</button>
   </form> | 
   <form action="/Home/Contact" method="POST">
     <input type="hidden" name="id" value="2">
     <button type="submit">Contact</button>
   </form>
   <div id="result"></div>
</body>

<body>
   <form action="/Home/About/?id=1" method="POST">
     <button type="submit">About</button>
   </form> | 
   <form action="/Home/Contact/?id=2" method="POST">
     <button type="submit">Contact</button>
   </form>
   <div id="result"></div>
</body>

如果是这样,它应该有用。

请注意,每个表单都包含一个名为id的输入元素,或者在表单action属性中将id作为查询字符串附加。这是重要,因为MVC路由和模型绑定依赖于此,因为您的控制器操作需要id参数。即public string Contact(string id)

同时确保您的操作正确形成,即如果您使用默认操作,请确保控制器名称是路径的一部分(即,如果您的控制器被称为 HomeController ,并且您的操作是联系,MVC将期望这个特定的路由(如果使用catch所有路由: / Home / Contact )。如果您使用自定义路由条目,则忽略此。

为什么服务器端操作可能不会被命中的另一个原因是由于您的表单方法。您的示例期望为 POST ,但如果您的表单方法为 PUT GET 或其他内容,则它也不会点击它。

如果你坚持这3件事,你可能不会有问题。