2014-01-09 3 views
0

Я следующий cshtml на мой взгляд:Mvc Форма данные не размещать на Web API контроллера Asp.net

<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> 

Я хочу отправить значение как DropDownList на мой веб-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.

+0

'API Controller' не могут принимать параметры, как это. Добавьте 'deptname' и' обозначение' как свойства вашего 'EmployeeViewModel' или создайте новую модель в целом. –

ответ

0

вы используете 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'); } 
      }); 
     }); 
    }); 
+0

Это не работает, я пробовал оба сообщения и получаю –

+0

Вы не указали имя метода в запросе – Cris

0

По вашему вопросу вы хотите отправить только выпадающие данные, то Попробуйте

$(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 
     } 
0

Вы пытаетесь отправить данные как часть 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'); } 
     }); 
}); 

С вашим контроллером апи, как это:

[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'); } 
     }); 
}); 

С контроллер апи глядя, как это:

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

} 
+0

Это не обязательно так. Нет причин, по которым POST не может содержать некоторые данные в URI, а некоторые - в теле POST. –

Смежные вопросы