2017-06-27 28 views
-1

チェックボックスをオンまたはオフにしたときにデータベースを更新しようとしています。チェックボックスをクリックすると更新されます。これは私がこれまでに持っていたものですが、私のコントローラは決して打撃を受けません。それを修正するために私は何ができますか?理想的には私はcustomer.IsDoneとcustomer.Idの新しい価値を私のコントローラに渡したいと思いますが、私はこれをどうやって行うのか分かりません。私の見解でMVCのチェックボックスを変更してデータベースを更新する方法

私の見解では、チェックボックス

<td>@Html.CheckBoxFor(m => customer.IsDone, new { onclick = "UpdateCustomer(IsDone)" })</td> 

機能

function UpdateCustomer(isDone) { 
     $.ajax({ 
      type: 'POST', 
      url: @Url.Action("UpdateCustomer", "Home"), 
      data: { check: isDone }, 
      success: success, 
      dataType: 'json' 
     }); 
    } 

これは私のコントローラメソッド

[HttpPost] 
    public ActionResult UpdateCustomer(bool check) 
    { 
     //code will be here to update the db 

     var customers = new CustomerGetAll(); 
     var list = customers.Execute(); 

     return View("Customers", list); 
    } 

答えて

1

あなたのコードにはいくつかの問題があります。

UpdateCustomerメソッドを呼び出すときは、まずIsDoneという変数を渡しています。しかし、isDoneはどこに定義されていますか?

第二に、このライン、

url: @Url.Action("UpdateCustomer", "Home"), 

ブラウザ

url: /Home/UpdateCustomer, 

でレンダリングするときUrl.Actionヘルパーは、出力文字列と、あなたのコードは次のようになりますが今のブラウザのJavaScriptフレームワークは、通常考えています2番目の部分が:のjs変数として定義されていないと、定義されていない変数を使用するという構文エラーが発生します。しかし、我々は\を持っているので、別の "無効な正規表現フラグ"構文エラーが出ます!

この問題を回避するには、結果を引用符で囲む必要があります。作るとき

以下のコードを使用すると、特定の顧客レコードを更新する場合、あなたはおそらく同様に顧客IDを渡したい、

function UpdateCustomer(elem) { 
    var isDone = $(elem).is(':checked'); 
    $.ajax({ 
     type: 'POST', 
     url: "@Url.Action("UpdateCustomer", "Home")", 
     data: { check: isDone }, 
     success: function(res) { 
      console.log(res); 
     }, 
     dataType: 'json' 
    }); 
} 

また

@Html.CheckBoxFor(m =>customer.IsDone, new { onclick = "UpdateCustomer(this)" }) 

やスクリプトを動作するはずですajax呼び出し。チェックボックスマークアップのhtml 5データ属性にその値を保持し、それを読んで必要に応じて使用することができます。

@Html.CheckBoxFor(m =>customer.IsDone, new { onclick = "UpdateCustomer(this)", 
                 data_customerid = customer.Id }) 

これにより、 "data-customerid"のhtml5データ属性のチェックボックスがレンダリングされます。あなたが今しなければならないすべては、この値を読み、サーバーのアクションメソッドは、我々は、クライアント側のコードから

[HttpPost] 
public ActionResult UpdateCustomer(bool check,int customerId) 
{ 
    // to do : Save and return something 
} 
を送信している顧客IDを受け入れるための新しいパラメータを持っていることを確認し、AJAX経由

function UpdateCustomer(elem) { 
    var isDone = $(elem).is(':checked'); 
    var cid = $(elem).data('customerid'); 
    $.ajax({ 
     type: 'POST', 
     url: '@Url.Action("UpdateCustomer", "Home")', 
     data: { check: isDone,customerId:cid }, 
     success: function(res) { 
      console.log(res); 
     } 
    }); 
} 

を送って、あります

+0

ありがとうございました!私は@ Html.CheckBoxFor(m => customer.IsDone、新しい{onclick = "UpdateCustomer(this)"})の前にこれを持っていましたが、私はこれを非常に新しくしています。行う。私は顧客のIDをコントローラーに渡すことができますか? – zlopez

+0

顧客IDの送信を処理する更新された回答を参照 – Shyju

+0

ありがとう!魅力的に働いた。私はこれに似た別の投稿を見てみましたが、広範囲にわたり私はそれを得ることができませんでした。 – zlopez

0

である私は、似た何かを持っている、と私はあなたが解決することができると思いますあなたの問題...

マイHTML CONTROLLER

public JsonResult GravarAvaliacao(bool avalia1, string idgravacao) 
    { 
     string _userId = User.Identity.GetUserId(); 
     var avaliaData = new OperadorAvaliacaoData(); 
     avaliaData.GravaAvaliacao(avalia1, idgravacao); 

     return Json(true, JsonRequestBehavior.AllowGet); 
    } 

のみdiferenceは、お使いのモデルのチェックボックスで、アクションのトリガーON

<td> 
    @{ 
     bool avalia1 = false; 
     @Html.CheckBox("avalia1", avalia1, new { autocomplete = "off", data_on_text = "Sim", data_off_text = "Não" }) 
    } 
</td> 

JS

var avalia1 = $("#avalia1").is(":checked"); 

var url = "/Telefonia/GravarAvaliacao"; 

$.ajax({ 

    url: url, 
    datatype: "json", 
    data: { 'avalia1': avalia1,'idgravacao': idgravacao }, 
    type: "POST", 
    success: function (data) { 
    } 
}); 
} 

関連する問題