2017-02-15 34 views
0

webapiを使用してサーバーにデータを渡しています。フォーラムの人々のおかげで、もう1つのエンティティフレームワークと角度に基づいて1つのドロップダウンを埋めることができました。私が把握したいのは、WebAPIを使ってスクリーンデータをサーバーに戻す方法でした。角度のコードが、私はエラーを取得していますと呼ばれている新しい角度に。角度/ webapiを使用してサーバーにデータを戻そうとしています

:badreq「のHttp要求の設定がオブジェクトでなければなりません」

このエラーは、$ HTTP

に示し、それは示し、ここで私はオンラインの例を見つけました各HTMLコントロールで使用される親モデルを作成する機能。オンラインの例では、テキストボックスを使用していましたが、選択リストを使用していますが、これも機能するはずです。

私が間違っていることを教えてもらえますか?

私はそれを感謝します!

フォローアップ:私がこの時点で抱えている問題は、角度のsaveattributecontrollerのデータがUNDEFINEDと書かれているようです。だから、私が今のところ信じていない問題はwebapiへの呼び出しですが、HTMLの "Detail"から渡されていないデータです。

フォローアップ2:以下のLorenzoのコメントに基づいています。 Submitvaluateボタンの周りにattributevaluecrollerを置くことで、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>

//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; 
 
     } 
 
    
 
    } 
 
}

// 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"; 
 
     } 
 
    } 
 
} 
 
    
 

+0

'$ httpをどうすればいいですか?post( "WebAPIAttribute/attributesave"、GetAll) '? – devqon

+0

アプリケーションが作成するHTTP投稿要求を追加することもできますか。 – Alok

+0

HTMLでattributesave(detail)をattributesave($ scope.detail)に変更するとどうなりますか? - あなたの行動でまだデータが未定義ですか? –

答えて

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 
        }) 
       } 
+0

私は上記のフォローアップを追加しました。この時点での問題は、attribute.js上のsaveattributecontrollerのDataがUNDEFINEDを表示していることです。何らかの理由でデータがHTMLから渡されることはありません。あなたの答えが良くないと言っているわけではありませんが、私はそれを試してみました。私はまだ同じ問題を抱えています。非常に速い応答に感謝します。あなたたちは素晴らしいです! – jack

+0

私は、あなたがsave attributesControllerを使って兄弟コントローラスコープにアクセスしようとしていることが問題だと思います。 2人の兄弟コントローラとのコミュニケーションのためにこれを見てください http://stackoverflow.com/questions/27709769/communicating-between-subling-scopes-in-angular – LorenzoBerti

+0

Lorenzo、それは私が2番目のフォローアップ私はwebapiのコントローラへの呼び出しに邪魔されているようです。ありがとうございました! – jack

0

(私はこの初期の投稿を考えたが、それは保存していない)

私は最後の部分を考え出しました。私は経路にapi /を追加する必要がありました。今WEBAPIする

API/WebAPIAttributes/attributesave/

コールが通過し、画面からデータを渡します。

私が以前持っていた問題に答えるのを手伝ってくれたすべての人に感謝します。

関連する問題