我正在尝试使用webapi以角度传递数据到服务器。感谢论坛上的人们,我能够根据另一个使用实体框架和角度来填充1个下拉。接下来我要弄清楚的是如何使用webapi将屏幕数据传回服务器。
当调用角度代码时,我收到一个错误:badreq' Http请求配置必须是一个对象'
此错误显示在$ http
中我在网上找到了一个示例,它显示了创建每个html控件使用的父模型的能力。对于在线示例,他们使用文本框,但我使用的是选择列表,但我认为这也应该有效。
有人可以告诉我我做错了吗?
我很感激!!
关注:此时我遇到的问题似乎是Angular saveattributecontroller中的数据状态为UNDEFINED。所以我在这一点上不相信的问题是对webapi的调用,但数据没有从"详细信息"在HTML中。
关注2:根据洛伦佐的评论如下。通过将attributevaluecontroller放在提交按钮周围,我现在可以看到传递给attribute.js中的saveattributecontroller的数据是好的。我还意识到我需要在saveattributecontroller中引用Data.A和Data.V。但现在似乎没有发生对WebAPIAttribute控制器的调用。我尝试了我原来的方式和之前建议的另一种方式,但是对控制器的调用似乎从未经历过。任何人都可以帮我吗?
跟进3:当我单步执行角度javascript时,我发现的错误是资源无法找到。所以我假设它没有找到webapi控制器由于某种原因。它可能非常简单,但我没有看到它。
var myapp = angular.module('attributeapp', []);
myapp.controller('attributecontroller', function ($scope, $http) {
$http.get('/Attribute/AttributeIndex/').then(function (response) {
$scope.Attributes = response.data;
})
})
myapp.controller('attributevaluecontroller', function ($scope, $http) {
$scope.getattributevalues = function (id)
{
$http.get('/Attribute/getattributevalues/' + id).then(function (response) {
$scope.A = id;
$scope.AttributeValues = response.data;
})
}
})
myapp.controller('saveattributecontroller', function($scope, $http){
$scope.attributesave = function (Data) {
var GetAll = new Object();
GetAll.AttributeKey = Data.AttributeKey;
GetAll.AttributeValueKey = Data.AttributeValueKey;
$http({
url: "WebAPIAttribute/attributesave",
dataType: 'json',
method: 'POST',
data: GetAll,
headers: {
"Content-Type": "application/json"
}
}).success(function (response) {
$scope.value = response;
})
.error(function (error) {
alert(error);
});
}
})

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="Scripts/angular.js"></script>
<script src="Scripts/attribute.js"></script>
</head>
<body data-ng-app="attributeapp">
<div data-ng-controller="attributecontroller">
<span data-ng-controller="attributevaluecontroller">
<select data-ng-model="detail.A" data-ng-change="getattributevalues(detail.A)" data-ng-options="Attribute.Attribute_Key as Attribute.Attribute_Desc for Attribute in Attributes"><option value="">--Select--</option></select><br />{{detail.A}}
<select data-ng-model="detail.V" data-ng-options="Attribute_Value.Attribute_Value_Key as Attribute_Value.Attribute_Value_Desc for Attribute_Value in AttributeValues"><option value="">--Select--</option></select>{{detail.V}}
</span>
<br />
<span data-ng-controller="saveattributecontroller">
<input type="button" value="submit" data-ng-click="attributesave(detail)"/>
</span>
</div>
</body>
</html>
&#13;
//AttributeControler.cs
using System;
using System.Collections.Generic;
using MVC_APP1.Models;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MVC_APP1.Controllers
{
public class AttributeController : Controller
{
//
// GET: /Attribute/
public ActionResult AttributeIndex()
{
Cafe_CPDEntities objEntity = new Cafe_CPDEntities();
var data = objEntity.Attributes.ToList();
return Json(data, JsonRequestBehavior.AllowGet);
}
public ActionResult getattributevalues(int id)
{
Cafe_CPDEntities objEntity = new Cafe_CPDEntities();
var data = objEntity.Attribute_Value.Where(m=>m.Attribute_Key==id);
//string test = data.FirstOrDefault().Attribute_Value_Desc;
return Json(data, JsonRequestBehavior.AllowGet);
}
public ActionResult attributesave(List<int> ReturnData)
{
return null;
}
}
}
&#13;
// WebAPIAttributeController.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
namespace MVC_APP1.Controllers
{
public class WebAPIAttributeController : ApiController
{
public class GetAll
{
public string AttributeKey { get; set; }
public string AttributeValueKey { get; set; }
}
[HttpPost]
public string attributesave(HttpRequestMessage request,
[FromBody] GetAll getAll)
{
return "Data Reached";
}
}
}
&#13;
答案 0 :(得分:0)
尝试
$scope.attributesave = function (Data) {
var GetAll = new Object();
GetAll.AttributeKey = Data.AttributeKey;
GetAll.AttributeValueKey = Data.AttributeValueKey;
$http.post("WebAPIAttribute/attributesave", getAll)
.then(function(response){
//here your operations
})
}
答案 1 :(得分:0)
(我认为我发布的时间早了,但是没有保存)
我想出了最后一部分。我需要在路线上添加api /。
API / WebAPIAttributes / attributesave /
现在,对webapi的调用将通过并从屏幕传递数据。
非常感谢那些帮助回答我之前遇到的问题的人。