【问题标题】:Mvc Form data is not post to the Asp.net Web API ControllerMvc 表单数据未发布到 Asp.net Web API 控制器
【发布时间】:2014-01-27 14:15:46
【问题描述】:

我认为有以下cshtml:

<div>
    @(Html.Kendo().DropDownList()
            .Name("Designation")
            .DataValueField("Designation")
            .DataTextField("Designation")
            .SelectedIndex(0)
            .BindTo((System.Collections.IEnumerable)ViewData["Designation"]))
    @(Html.Kendo().DropDownList()
            .Name("DeptId")
            .DataValueField("DeptId")
            .DataTextField("DeptName")
            .SelectedIndex(0)
            .BindTo((System.Collections.IEnumerable)ViewData["Department"]))
    <input class="k-button" id="btnFilter" type="submit" value="Filter" />
</div>

我想将两个下拉列表的值发布到我的 Web ApiController。我创建了以下 jquery ajax 方法来调用 api。但它不起作用。

JQuery:

$(document).ready(function () {
        $("#btnFilter").click(function () {
            debugger;
            var designation = $("#Designation").val();
            var deptname = $("#DeptId").val();
            $.ajax({
                url: "http://localhost:8648/api/Employee" + deptname + designation,
                type: "Post",
                // data: JSON.stringify([designation, deptname]), //{ Name: name, 
                // Address: address, DOB: dob },
                contentType: 'application/json; charset=utf-8',
                success: function (data) { alert("posted") },
                error: function () { alert('error'); }
            });
        });
    });  

这是我的 API 控制器发布方法:

public HttpResponseMessage PostEmployee(EmployeeViewModel newEmployee, String deptname, String designation)
        {
           //code
        }

如何将 dropdownlost 的值发送到我的 ApiController。

【问题讨论】:

  • API Controller 不能接受这样的参数。添加deptnamedesignation 作为EmployeeViewModel 的属性或完全创建新模型。

标签: jquery ajax asp.net-mvc asp.net-mvc-4 asp.net-web-api


【解决方案1】:

根据您的问题,您只想发布下拉数据 试试这个

$(document).ready(function () {
        $("#btnFilter").click(function () {
            debugger;
            var designation = $("#Designation").val();
            var deptname = $("#DeptId").val();
            $.ajax({
                url: "http://localhost:8648/api/Employee?deptname="+deptname+"&designation="+designation ,
                type: "Post",                    
                contentType: 'application/json; charset=utf-8',
                success: function (data) { alert("posted") },
                error: function () { alert('error'); }
            });
        });
    });  

API 控制器

public HttpResponseMessage PostEmployee(String deptname, String designation)
        {
           //code
        }

【讨论】:

    【解决方案2】:

    您使用的是GET 方法,而您的API 方法是POST

    您的请求将如下所示

    $(document).ready(function () {
            $("#btnFilter").click(function () {
                debugger;
                var designation = $("#Designation").val();
                var deptname = $("#DeptId").val();
                $.ajax({
                    url: "http://localhost:8648/api/Employee/PostEmployee",
                    type: "Post",
                    data: {"newEmployee":/*your serialized data for the model*/,
                          "deptname":deptname ,"designation":designation }
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) { alert("posted") },
                    error: function () { alert('error'); }
                });
            });
        });  
    

    【讨论】:

    • 您没有在请求中指定方法名称
    【解决方案3】:

    您正在尝试将数据作为请求 URL 的一部分发送。只有在发出 get 请求时,您才会这样做。

    如果您希望以获取请求的形式执行此操作,则需要在 $.ajax 函数中指定它是 GET 请求并正确构造 url:

    $.ajax({
              //construct the url with the data as part of the query string
              url: "http://localhost:8648/api/Employee?deptname="+deptname+"&designation="+designation ,
              //specify it's a get request
              type: "GET",                    
              contentType: 'application/json; charset=utf-8',
              success: function (data) { alert("posted") },
              error: function () { alert('error'); }
          });
    });
    

    像这样使用你的 api 控制器:

    [HttpGet]
    public HttpResponseMessage PostEmployee(String deptname, String designation)
    {
    
    }
    

    但是,如果您希望以 POST 请求的形式执行此操作,则需要在请求正文中发送数据:

    $.ajax({
              url: "http://localhost:8648/api/Employee,
              //specify it's a POSTrequest
              type: "POST",                    
              contentType: 'application/json; charset=utf-8',
              //send data as part of body
              data: {designation: designation, deptname: deptname}
              success: function (data) { alert("posted") },
              error: function () { alert('error'); }
          });
    });
    

    你的 api 控制器看起来像这样:

    [HttpPost]
    public HttpResponseMessage PostEmployee(String deptname, String designation)
    {
    
    }
    

    【讨论】:

    • 不一定是这样。没有理由 POST 不能在 URI 中包含一些数据,而在 POST 正文中不能包含一些数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 2023-03-28
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多