JQuery函数Ajax方法不在MVC中调用控制器

时间:2017-04-16 11:34:50

标签: c# jquery ajax asp.net-mvc-4

我有JQuery函数来收集所有已检查的ApproveURLsController并传递给控制器​​方法,但它没有调用控制器方法。 控制器名称:$("#Approve").click(function () { checkedIds = $(".ckb").filter(":checked").map(function () { return this.id; }); $.ajax({ type: "POST", url: "@Url.Action("ApproveOrRejectAll", "ApproveURLs")", traditional: true, data: { Ids: checkedIds.toArray() , Status: "A" }, success: sucessFunc, error: errorFunc }); function successFunc(data, status) { location.reload(); } function errorFunc(data, status) { alert('error'); } });

这是我的代码:

<input type="button" value="Approve" id="Approve" class="btn btn-primary" />

在上面的代码中“Approve”是按钮,我已经像这样定义了

[HttpPost]
public void ApproveOrRejectAll(List<int> Ids, string Status)
{

}

和我的控制器方法

RewriteEngine on  
RewriteRule ^/rsrc/(.*)     -    [L,QSA]  
RewriteRule ^/favicon.ico   -                       [L,QSA] 
RewriteRule ^(.*)$          /index.php?__path__=$1  [B,L,QSA]

Require all granted

我无法找到问题,请帮助我。

4 个答案:

答案 0 :(得分:0)

创建模型以保存所需的值。

public class ApproveOrRejectAllModel {
    public List<int> Ids { get; set; }
    public string Status { get; set; }
}

更新操作以使用已定义的模型

[HttpPost]
public void ApproveOrRejectAll([FromBody]ApproveOrRejectAllModel model) {
    List<int> Ids = model.Ids;
    string Status = model.Status;

    //..other code
}

在客户端,确保数据正确发送。

$("#Approve").click(function () {

    checkedIds = $(".ckb").filter(":checked").map(function () { return this.id; });

    //Constructing payload to be posted.
    var model = { Ids: checkedIds.toArray(), Status: "A" };

    $.ajax({
        type: "POST",
        url: "@Url.Action("ApproveOrRejectAll", "ApproveURLs")",
        traditional: true,
        data: JSON.stringify(model), //<-- stringify data to be sent.
        success: sucessFunc,
        error: errorFunc
    });

    function successFunc(data, status) {

        location.reload();
    }
    function errorFunc(data, status) {

        alert('error');
    }
});

答案 1 :(得分:0)

如果没有一些解决方法,您无法通过HTTP调用Non-ActionResult函数。

您必须将[WebMethod]嵌入在您的void ApproveOrRejectAll(...)之上或将类型更改为ActionResult。

答案 2 :(得分:0)

使用可以使用java脚本数组实现此目的

查看: -

<div>
    <input type="checkbox" name="checkBoxHeader" class="checkBoxHeader" value="1" /> 1
    <input type="checkbox" name="checkBoxHeader" class="checkBoxHeader" value="2" /> 2
    <input type="checkbox" name="checkBoxHeader" class="checkBoxHeader" value="3" /> 3
</div>

<div class="form-group">
    <div class="col-md-offset-2 col-md-10">
        <input type="submit" value="Login" class="btn btn-default" id="btnSummit"/>
    </div>
</div>
@Scripts.Render("~/bundles/jquery")
<script type="text/javascript">
    var obj;
    $(".checkBoxHeader").click(function () {
        var checkBoxValueToPush = new Array();

        //checked check box value
        $('.checkBoxHeader:checked').each(function () {
            checkBoxValueToPush.push($(this).val());
        });
        obj = {
            CheckeBoxdIds: checkBoxValueToPush
        };
    });
    $("#btnSummit").click(function () {
        $.ajax({
            url: '/Default/filterData',
            contentType: 'application/json; charset=utf-8',
            type: 'POST',
            data: JSON.stringify(obj),
            cache: false,
            success: function () {
            },
            error: function (xhr, status, error) {
                alert("Error");
            }
        });
    });
</script>

控制器: -

[HttpPost]
        public void filterData(List<int> CheckeBoxdIds)
        {
            // Code
        }

希望工作!!!

快乐编码!!!

答案 3 :(得分:0)

您好,根据您的代码段,我了解您在代码中遗漏的一些内容。我解释了一个使用ajax调用控制器的示例。

    //Define the type of result you want from you controller here I m describing for JSONResut
    //Controller with 2 parameter's make sure the type and name of parameter  posted is same as written in controller method.
    public JsonResult SaveEmployeeRecord(string id,string name)  
    {  
         string this_id = id;  
         string this_name = name;  
         // do here some operation  
         return Json(new {id=this_id,name = this_name },JsonRequestBehavior.AllowGet);  
}

//View /Javascript to call action method
$.ajax({  
           type: 'POST',  
           dataType: 'json',  
           url: '/Home/SaveEmployeeRecord',  
           data: { id: '67', name: 'Prashant' },  
           success: function (Data) {  
               alert(data.id);  
               alert(data.name);  
           },  
           error: function (XMLHttpRequest, textStatus, errorThrown) {  

           }  
       });