2017-01-21 5 views
1

を返し、私は問題以下している: を私は私のMVCコントローラPutメソッド - バックエンドはbadRequest(無効モデル)/ C#/ WebAPIの/ MVC

[HttpPut, Route("{id:int}")] 
    public IHttpActionResult Update(int id, [FromBody]Student student) 
    { 
     if (!ModelState.IsValid) 
     { 
      return BadRequest(ModelState); 
     } 

     using (var ctx = new EfDbContext()) 
     { 
      student.Id = id; 
      ctx.Students.Attach(student); 
      var dbEntry = ctx.Entry(student); 
      dbEntry.State = EntityState.Modified; 
      if (student.Grades != null) 
      { 
       foreach (var grade in student.Grades) 
       { 
        ctx.Grades.Attach(grade); 
        var entry = ctx.Entry(grade); 
        entry.State = grade.Id == 0 ? EntityState.Added : 
         EntityState.Modified; 
       } 
      } 

      ctx.SaveChanges(); 
     } 
     return Ok(); 
    } 

内のPUTメソッドを働いてきた私も自分を持っていますjavascriptはlocalhostウェブサイトのHTMLフォームで作業しています。

function addStudent() { 
console.log($("#newStudent").serializeArray()) 
$.ajax({ 
    url: 'http://localhost:56658/api/api/students', 
    type: 'post', 
    dataType: 'json', 
    data: $("#newStudent").serializeArray(), 
    success: function (data) { 
     $('#students').append(listItem(data)); 
    } 
}); 

}

と私のeditStudentスクリプト(ここでの問題がある)

function editStudent(id) { 
console.log($("#newStudent").serializeArray()) 
$.ajax({ 
    url: 'http://localhost:56658/api/api/students/' + id, 
    type: 'put', 
    dataType: 'json', 
    data: { id: id,student: $("#newStudent").serializeArray() }, 
    success: function (data) { 
     $('#students').append(listItem(data)); 
    } 
}); 

}

あなたが見ることができるように、私は2つのほとんど同一のスクリプトを持っています。さて、問題はeditStudentです - 私のバックエンドはweb上のsubmitボタンを押すとすぐにbadrequestを返します(すべてのテキストフィールドに有効なデータが入っています)。生徒さんの作品を追加してください(POSTメソッドでモデルの正当性をチェックすることもできます)。 「編集」操作のためのフォームは学生を追加するためのフォームの正確なコピーです。フィールドIDなどのスペルミスを避けるため、ここに問題がないようにしてください。

どこが問題でしょうか?うまくポストマンでテストが、私はそれはJSで動作させることができないとき。

私はあなたが身体にidを渡すが、アクションメソッドでは、あなただけStudent体からの期待 乾杯

+0

なぜ 'id'が' url'と 'data'に必要ですか? –

+0

私は、editStudentの投稿されたデータがStudentクラスに適合しないと思います。 Studentクラスの定義と、送信されたJSONのJSONデータ対スクリプトのJSONデータを入力してください。私はいくつかの違いがあると思う。 –

+0

2番目のajax呼び出しのデータからIDを削除しようとしています。すでにクエリパラメータ –

答えて

0

任意の助けのためにgratefullだろう。

変更dataの:

data: $("#newStudent").serializeArray(), // pass only student 
+0

で渡しています。ありがとうございます。私の問題は解決しましたが、putメソッドで2つの引数が必要な場合は、 '私はJSの新しいです。 – macck

+0

@ macckはい、あなたはする必要があります。しかし、第2引数に '[FromBody]'を追加してください。 –

+0

もう一度ありがとう、私は両方を渡す必要があると仮定[FromBody]の隣に私の問題を解決する必要がありますか? – macck

0

なぜあなたはputを使いたいですか?

putを使用すると、サーバー上の特定のリソースを配置/置き換えたいとします。
このURLの下にリソースが見つからないため、不正なリクエストが発生します。

基本的に、リクエストはコントローラメソッドにまったくルーティングされません。

関連する問題