2017-08-17 4 views
-1

これは私の部分的なビューのコードです。私はBeginCollectionItemを使用しています。asp.net mvc Jqueryテーブルから空の行を削除

<tr> 

@using (Html.BeginCollectionItem("QuoteLines")) 
{ 
    <td> 

     @Html.HiddenFor(m => m.QuoteID) 
     @Html.HiddenFor(m => m.QuoteLineID) 
    </td> 
    <td class="visible-lg col-lg-3"> 
     @Html.TextBoxFor(m => m.Group, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.Group, "", new { @class = "text-danger" }) 
    </td> 
    <td class="col-xs-9 col-sm-9 col-md-8 col-lg-5"> 
     @Html.TextAreaFor(m => m.Description, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.Description, "", new { @class = "text-danger" }) 
    </td> 
    <td class="visible-md visible-lg col-md-2 col-lg-2"> 
     @Html.TextBoxFor(m => m.Quantity, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.Quantity, "", new { @class = "text-danger" }) 
    </td> 
    <td class="col-xs-3 col-sm-3 col-md-2 col-lg-2"> 
     @Html.TextBoxFor(m => m.Price, htmlAttributes: new { @class = "form-control" }) 
     @Html.ValidationMessageFor(model => model.Price, "", new { @class = "text-danger" }) 
    </td> 
    <td> 
     <button type="button" class="delete form-control btn-default" data-id="@model.QuoteLineID">Delete</button> 
    </td> 
} 

重要な部分は、削除ボタンであり、それは行を削除するにはJavaScriptによって参照されるクラスを有しています。しかし何らかの理由で行にデータがない場合はコードを実行しません。

<button type="button" class="delete form-control btn-default" data-id="@model.QuoteLineID">Delete</button> 

Javascriptコード:

<script> 
var url = '@Url.Action("DeleteQuoteLine")'; // assumes its in the same controller 
$('.delete').click(function() { 


    if (confirm('verwijderen?')) { 
     var id = $(this).data('id'); 
     var row = $(this).closest('tr'); 
     if (id == 0) { // or if(id == 0) depending if your property is nullable 
      row.remove(); // the item never existed so no need to call the server 
      return; 
     } 
     $.post(url, { ID: id }, function (response) { 
      if (response) { 
       row.remove(); // OK, so remove the row 
      } else { 
       // Oops - display and error message? 
      } 
     }); 
    } 
}); 
</script> 
+1

あなたは 'confirm'を見ていませんか... ...私の2番目の質問...あなたはあなたの' id == 0'を確信していますか?それとも属性は 'undefined'ですか?質問...データがない場合でもレンダリングされるデータなしで行しますか? QuoteLinesプロパティの一部ですか? –

+0

私はそのidにヌルの合体を投げるでしょう。 'data-id =" @(model.QhoteLineID ?? "0") "'それがIDが存在するかどうかをチェックする 'if'でラップしてください。 – nurdyguy

+0

大文字のM 'data-id =" @ Model.QuoteLineID "(' @ model'ではなく)ですが、それは単にタイプミスであると思います。 _rowにデータがありませんという意味は?あなたはajaxを使って新しい行を追加することを指していますか? 'QuoteLineID'プロパティは' type'とは何ですか? –

答えて

1

あなたが行とはどういう意味ですかは、データを持ちませんか?行にデータがない場合、data-idに数値ID値が格納されていない場合、有効な型のIDがあると予想されますが、nullなので、Actionメソッドはエラーをスローしますこれらのエラーをログに記録する場合は、ASP.NETのエラー処理を使用してキャッチされます)、ログを確認してください。これを確認するには、ネットワーキングツールを使用してサーバーに要求を行っているかどうかを確認し、エラー応答を返します。

アクションメソッドの署名を投稿してください。それは見るのに役立つだろう。

+0

データがない場合、' data-id'は0です。 それはJavaScriptコードに達しません。私は にブレークポイントを持っています。 'if(confirm ...')、決してヒットしません。 私は行を投稿しようとすると、いくつかの '必須です'という注釈を使ってサーバから戻ってきます。裾。その前に、削除イベントは開始されません。 「データID」は0までです –

+0

元のデータセットを取得するには、AJAX経由でデータを取得しますか? –

+0

最初のセットは です。@foreach(モデルのvar QuoteLine) { Html.RenderPartial( "_ QuoteLineCollectionItem"、QuoteLine); } ' 余分な行(応答していない)はAjaxのアクションです ' Ajax.ActionLink( "QuoteLine"、 "AddQuoteLine"、 "Quotes"、new {QuoteID = Model.FirstOrDefault()== null?0: Model.First()。QuoteID}、新しいAjaxOptions(){ HTTPMETHOD = "GET"、 InsertionMode = InsertionMode.InsertAfter、 UpdateTargetId = "ターゲットID" ' –

関連する問題