2016-11-29 43 views
-1

這是我的項目發送的產品清單中MVC

public class RequestViewModel 
{  
    public long FeederId { set; get; } 

    public int A { set; get; } 

    public int B { set; get; } 

    public int C { set; get; } 

    public int Remain { set; get; } 
} 

,這是我想從我的形式發送到我的控制器

public class RequestAddListViewModel 
{ 
    public List<SuppliantRequestFeederAddViewModel> SuppliantRequestFeederAddViewModels { set; get; } 

    public List<SelectListItem> FeederSelectListItems { set; get; } 

    public long NodeId { set; get; } 
} 

第一次我的窗體加載我我的新增模式有一個項目,我有一個button當我是我的第一行克隆和append到我的存在,例如單擊現在我有我的形式8項,我可以在客戶端刪除的各個項目。如果我沒有刪除任何項目並提交表單沒有問題。 我的問題是當刪除一個項目,例如第二個刪除時,然後提交我的表單沒有我的控制器上的項目。沒有發送給控制器。

查看

@for (int index = 0; index < Model.RequestAddListViewModel.Count; index++) 
{ 
    var req = Model.RequestAddListViewModel[index]; 
    <tr class="requestrow"> 
     <td> 
      @Html.DropDownListFor(p => p.req[index].FeederId,  Model.FeederSelectListItems, new { @class = "form-control" }) 
     </td> 
     <td> 
      @Html.TextBoxFor(p => p.req[index].A, new { @class = "form-control" }) 
     </td> 
     <td> 
      @Html.TextBoxFor(p => p.req[index].B, new { @class = "form-control" }) 
     </td> 
     <td> 
      @Html.TextBoxFor(p => p.req[index].C, new { @class = "form-control" }) 
     </td> 
     <td> 
      <button type="button" class="btn btn-primary btn-icon btn-rounded newfeeder"><i class="icon-plus2"></i></button> 
     </td> 
    </tr> 
} 

和我的jQuery腳本(編輯)

var inputCount=0; 
$(document).on('click', '.newfeeder', function() { 
    inputCount++; 
    var tr = $(this).closest("tr").clone(); 
    tr.find("input").val(0); 
    tr.find("button").removeClass("btn-primary").addClass("btn-danger").removeClass("newfeeder").addClass("deleterow"); 
    tr.find("button i").removeClass("icon-plus2").addClass("icon-trash"); 
    tr.find("input,select").each(function() { 
     $(this).attr({ 
      'name': function (_, name) { return name.toString().replace('0', inputCount) }, 
      'id': function (_, id) { return id.toString().replace('0', inputCount) } 
     }); 

    }); 
    $(this).closest("tr").after(tr); 
}); 

$(document).on('click', '.deleterow', function() { 
    $(this).closest("tr").remove(); 
}); 
+0

您需要添加一個隱藏的輸入爲集合索引。請參閱[這個答案](http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308)。既然你有一個下拉列表,那麼使用'BeginCollectionItem()'方法。而且你要VAR TR = $(本).closest(「TR」)的clone();'的代碼行不正確地工作,以便能夠綁定到你的模型,當您提交 –

+0

@StephenMuecke,請看看編輯的零件。 –

+0

你看看鏈接,看看如何正確地做:) –

回答

0

終於,我發現我的解決方案後,添加或刪除新的項目,以我的形式 我調用這個函數ReCreateIndex()

function ReCreateIndex(container) { 
    $(container).each(function (index, obj) { 
     $("input,select", $(this)).each(function() { 
      if ($(this).attr("name")) { 
       var name = $(this).attr("name").replace($(this).attr("name").replace(/[^0-9]/gi, ''), index); 
       $(this).attr("name", name); 
      } 

      if ($(this).attr("id")) { 
       var id = $(this).attr("id").replace($(this).attr("id").replace(/[^0-9]/gi, ''), index); 
       $(this).attr("id", id); 
      } 
     }); 
    }); 
} 

這意味着在對項目進行任何更改後,重新創建項目的索引。

相關問題