Nella mia applicazione MVC 4, ho un cliente che può avere più siti e può iscriversi a più pacchetti di servizi. Una versione breve del mio modello di vista assomiglia sottoElenco di oggetti non vincolanti per il modello sul post back in asp.net mvc 4
public class SubscriptionModel
{
public int MemberId { get; set; }
public List<SitePackage> SitePackges { get; set; }
public SubscriptionModel()
{
SitePackges=new List<SitePackage>();
}
}
public class SitePackage
{
public int SiteId { get; set; }
public List<PackageDisplayItem> LstPackageDisplayItems { get; set; }
public SitePackage()
{
LstPackageDisplayItems=new List<PackageDisplayItem>();
}
}
public class PackageDisplayItem
{
public int PackageId { get; set; }
[Display(Name = "Package")]
public string Name { get; set; }
[DataType(DataType.Date)]
[Display(Name = "Start Date")]
public DateTime? StartDate { get; set; }
}
Nel mio regolatore I compilare il modello e poi passare alla vista del modello per il rendering
@using (@Html.BeginForm("CalculateCost", "HelpDesk", FormMethod.Post, new { @class = "form", id = "PackageSubscription", name = "PackageSubscription" }))
{
@Html.HiddenFor(x=>x.MemberId)
<table class="table">
@foreach (var site in Model.SitePackges)
{
<input name="SiteId" id="SiteId" type="hidden" [email protected]() />
<tr><td class="col-sm-3">@site.SiteId</td></tr>
<tr>
<th class="col-sm-3">
Name
</th>
<th class="col-sm-2">
Start Date
</th>
</tr>
@Html.Partial("_Packages",site.LstPackageDisplayItems)
}
La mia visione parziale è come
@model List<PackageDisplayItem>
@for (int i = 0; i < Model.Count; i++)
{
@Html.HiddenFor(x => x[i].PackageId)
<tr id="@Model[i].PackageId">
<td>
@Html.DisplayFor(x => x[i].Name)
</td>
<td>
@Html.TextBoxFor(x => x[i].StartDate, "{0:d MMM yyyy}", new { @class = "jquery_datepicker form-control", autocomplete = "off" })
</td>
</tr>
}
Ogni cosa rende bene ma sul modulo di post il modello di legatura non è vincolante SitePackges
lista e il suo conteggio è sempre 0. Il mio controller ha le seguenti firme.
[HttpPost]
public ActionResult CalculateCost(SubscriptionModel subscriptionModel)
{
var receivedModel = subscriptionModel;
}
Non sono sicuro se il modello che ho disegnato è l'approccio migliore per gestire questo requisito (Il requisito è quello di mostrare un unico sito e appena sotto di essa mostra il pacchetti e poi 2 ° sito e pacchetti, e così via). Sembra che i controlli abbiano generato indici univoci.
Jquery Messaggio
function SubmitForm() {
console.log($("#PackageSubscription").serialize());
$.ajax({
url: '/HelpDesk/CalculateCost',
cache: false,
dataType: 'json',
data: $("#PackageSubscription").serialize(),
type: 'POST',
success: function (data) {
}
});
}
mi apprezzeranno alcun aiuto. grazie
uso ciclo for con indicizzazione –