Dinamik içerik eklemek için Steve Sanderson'ın BeginCollectionItem yaklaşımını kullanıyorum. İlk aşamada yaptığım her şey iyi çalışıyor. Ancak, BeginCollectionItem başka bir BeginCollectionItem anlamında iç içe bir koleksiyonunu uygulamaya çalıştığınızda, işe yaramıyor.Yuvalanmış BaşlangıçKoleksiyonEtem
public class Order
{
[Key]
[HiddenInput]
public int id { get; set; }
[Display(Name = "Order number")]
public string number { get; set; }
...
[Display(Name = "Payment method")]
public List<PaymentMethod> payment_methods { get; set; }
...
}
public class PaymentMethod
{
public MethodOfPayment method { get; set; }
public CC cc { get; set; }
public CASH cash { get; set; }
public TT tt { get; set; }
}
public class TT
{
[Key]
public int id { get; set; }
[Required(ErrorMessage = "{0} is required.")]
[Display(Name = "Total amount")]
public double? total_value { get; set; }
...
[Display(Name = "Transfers")]
public List<Transfer> transfers { get; set; }
}
public class Transfer
{
[Key]
public int id { get; set; }
[Display(Name = "Payment")]
public int payment_id { get; set; }
[Required(ErrorMessage = "{0} is required.")]
[Display(Name = "SWIFT")]
public string swift { get; set; }
[Required(ErrorMessage = "{0} is required.")]
[Display(Name = "Amount transferred")]
public double? transfer_amount { get; set; }
[Required(ErrorMessage = "{0} is required.")]
[Display(Name = "Date transferred")]
public DateTime transfer_date { get; set; }
...
}
Şimdi ne ben sahip çeşitli ödeme yöntemleri var olabilecek bir sipariş olduğunu ve ödeme yöntemlerinden biri TT (teleks transferi) ise birkaç transferleri olabilir şöyledir:
Benim modelleri
vardır yer. Bir Siparişte birden fazla ödeme yönteminin bir toplama çalışması olarak uygulanması, ancak bir TT içinde birkaç aktarımı uygulamaya çalıştığımda, bu aktarımlardan hiçbiri denetleyiciye aktarılmaz. Yani her şey hariç, işleri@using prj.Helpers
@model prj.Models.Model.Transfer
...
<div class="editTransferRow">
//using (Html.BeginCollectionItem("transfers"))
@using (Html.BeginCollectionItem("tt.transfers"))
{
...
<div class="editor-label">
@Html.LabelFor(m => m.swift)<req>*</req>
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.swift, new { @class = "t_swift" })
</div>
...
<div class="editor-label">
@Html.LabelFor(m => m.transfer_amount)<req>*</req>
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.transfer_amount, new { @class = "t_transfer_amount" })
</div>
...
}
</div>
: _NewPayment kısmi olarak
@model prj.Models.Model.Order
@using (Html.BeginForm("Create")){
@Html.ValidationSummary(true, "Creation was unsuccessful. Please correct the errors and try again.")
...
@Html.TextBoxFor(m => m.number, new { id = "txtnumber" })
...
<div id="editorPaymentRows">
@foreach (var payment in Model.payment_methods)
{
@Html.Partial("_NewPayment", payment)
}
</div>
}
:
@using prj.Helpers
@model prj.Models.Model.PaymentMethod
<div class="editPaymentRow">
@using (Html.BeginCollectionItem("payment_methods"))
{
...
<div class="editor-label">
@Html.LabelFor(m => m.tt.total_value)<req>*</req>
</div>
<div class="editor-field">
@Html.TextBoxFor(m => m.tt.total_value)
</div>
...
<div id="editorTransferRows">
@if (Model.tt != null)
{
foreach (var transfer in Model.tt.transfers)
{
@Html.Partial("_NewTransfer", transfer)
}
}
...
</div>
}
</div>
ve nihayet _NewTransfer kısmi içinde
İşte benim bakış gibi görünür Denetleyici, PaymentMethods'ın TT özelliğindeki Liste aktarımları her zaman boştur. Kontrolöre düzgün bir şekilde geçilmiyor. Kaybettiğim bir şey mi var?
Yuvalanmış BeginCollectionItem çalışmıyor mu? Yapmam gereken ekstra bir adım var mı? Lütfen biraz ışık tutabilirsiniz. Teşekkür
Joe Stevens' yöntemi aşağıdaki bağlantıda gösterilen kullanarak bunu anladım: Bir Html.BeginCollectionItem
ile öneki almak için
http://www.joe-stevens.com/2011/06/06/editing-and-binding-nested-lists-with-asp-net-mvc-2/
Şerefe
sen adresinden çözüm gönderin Can:
ve hızlı bir test ayrıca sadece olabilir gibi görünüyor? –