Here is the ViewModel:
public class AssignedQuestionViewModel{ public int QuestionTemplateId { get; set; } public int QuestionGroupTemplateId { get; set; } public string QuestionText { get; set; } public bool Required { get; set; } public string RequiredCheckedString { get; set; } public QuestionLifeCycleAssignmentViewModel LifeCycle { get; set; }}public class QuestionLifeCycleAssignmentViewModel{ public List<QuestionLifeCycleAssignmentItemViewModel> Items { get; set; } public string SelectedLifeCycleCsvList { get; set; }}public class QuestionLifeCycleAssignmentItemViewModel{ public string LifeCycleDescription { get; set; } public int LifeCycleId { get; set; } public bool Assigned { get; set; } public string LifeCycleAbbreviation { get; set; }}Here is the View:
@(Html.Kendo().Grid<AssignedQuestionViewModel>() .Name("Questions_#=QuestionGroupTemplateId#") .Columns(columns => { columns.Bound(i => i.QuestionTemplateId).Hidden(); columns.Bound(i => i.QuestionGroupTemplateId).Hidden(); columns.Bound(i => i.Required); columns.Bound(i => i.QuestionText); columns.Bound(i => i.LifeCycle).ClientTemplate("\\#=LifeCycle.SelectedLifeCycleCsvList\\#"); } ) .ToolBar(toolBar => toolBar.Save()) .Editable(editable => editable.Mode(GridEditMode.InCell)) .DataSource(dataSource => dataSource .Ajax() .Batch(true) .ServerOperation(false) .Model(model => { model.Id(m => m.QuestionTemplateId); model.Field(m => m.QuestionTemplateId).Editable(false); model.Field(m => m.QuestionGroupTemplateId).Editable(false); model.Field(m => m.QuestionText).Editable(false); }) .Read(read => read.Action("ReadAssignedQuestions", "QuestionManagement", new { p = "#=QuestionGroupTemplateId#"}) .Type(HttpVerbs.Post) ) .Update(update => update.Action("SaveAssignedQuestions", "QuestionManagement")) ) .Events(e => e.Edit("testEvent")) .ToClientTemplate() )Here is the Controller:
[HttpPost] [HandleJsonException] public ActionResult SaveAssignedQuestions([DataSourceRequest] DataSourceRequest request, [Bind(Prefix = "models")] IEnumerable<AssignedQuestionViewModel> models) { var result = _questionManagementHelper.SaveQuestionAssignmentEdits(models); return Json(GetJsonResponse(result, "An error occurred saving assigned question edits.")); }Breaking in the controller, copied from the Watch window:
- LifeCycle {Esurety.Core.ViewModels.QuestionManagement.QuestionLifeCycleAssignmentViewModel} Esurety.Core.ViewModels.QuestionManagement.QuestionLifeCycleAssignmentViewModel- Items Count = 6 System.Collections.Generic.List<Esurety.Core.ViewModels.QuestionManagement.QuestionLifeCycleAssignmentItemViewModel>- [0] {Esurety.Core.ViewModels.QuestionManagement.QuestionLifeCycleAssignmentItemViewModel} Esurety.Core.ViewModels.QuestionManagement.QuestionLifeCycleAssignmentItemViewModel Assigned false bool LifeCycleAbbreviation null string LifeCycleDescription null string LifeCycleId 0 int| group | |
| filter | |
| models[0].QuestionTemplateId | 1 |
| models[0].QuestionGroupTemplateId | 1 |
| models[0].QuestionText | First Name |
| models[0].Required | true |
| models[0].RequiredCheckedString | checked |
| models[0].LifeCycle.Items[0][LifeCycleDescription] | Bond Application |
| models[0].LifeCycle.Items[0][LifeCycleId] | 1 |
| models[0].LifeCycle.Items[0][Assigned] | true |
| models[0].LifeCycle.Items[0][LifeCycleAbbreviation] | Nb |
And here is the TextView:
sort=&group=&filter=&models%5B0%5D.QuestionTemplateId=1&models%5B0%5D.QuestionGroupTemplateId=1&models%5B0%5D.QuestionText=First+Name&models%5B0%5D.Required=true&models%5B0%5D.RequiredCheckedString=checked&models%5B0%5D.LifeCycle.Items%5B0%5D%5BLifeCycleDescription%5D=Bond+Application&models%5B0%5D.LifeCycle.Items%5B0%5D%5BLifeCycleId%5D=1&models%5B0%5D.LifeCycle.Items%5B0%5D%5BAssigned%5D=true&models%5B0%5D.LifeCycle.Items%5B0%5D%5BLifeCycleAbbreviation%5D=Nb&models%5B0%5D.LifeCycle.Items%5B1%5D%5BLifeCycleDescription%5D=Renewal&models%5B0%5D.LifeCycle.Items%5B1%5D%5BLifeCycleId%5D=2&models%5B0%5D.LifeCycle.Items%5B1%5D%5BAssigned%5D=true&models%5B0%5D.LifeCycle.Items%5B1%5D%5BLifeCycleAbbreviation%5D=Rw&models%5B0%5D.LifeCycle.Items%5B2%5D%5BLifeCycleDescription%5D=Cancellation&models%5B0%5D.LifeCycle.Items%5B2%5D%5BLifeCycleId%5D=4&models%5B0%5D.LifeCycle.Items%5B2%5D%5BAssigned%5D=false&models%5B0%5D.LifeCycle.Items%5B2%5D%5BLifeCycleAbbreviation%5D=Cn&models%5B0%5D.LifeCycle.Items%5B3%5D%5BLifeCycleDescription%5D=Reinstatement&models%5B0%5D.LifeCycle.Items%5B3%5D%5BLifeCycleId%5D=6&models%5B0%5D.LifeCycle.Items%5B3%5D%5BAssigned%5D=false&models%5B0%5D.LifeCycle.Items%5B3%5D%5BLifeCycleAbbreviation%5D=Ri&models%5B0%5D.LifeCycle.Items%5B4%5D%5BLifeCycleDescription%5D=NonPBR&models%5B0%5D.LifeCycle.Items%5B4%5D%5BLifeCycleId%5D=7&models%5B0%5D.LifeCycle.Items%5B4%5D%5BAssigned%5D=false&models%5B0%5D.LifeCycle.Items%5B4%5D%5BLifeCycleAbbreviation%5D=Np&models%5B0%5D.LifeCycle.Items%5B5%5D%5BLifeCycleDescription%5D=PBR&models%5B0%5D.LifeCycle.Items%5B5%5D%5BLifeCycleId%5D=8&models%5B0%5D.LifeCycle.Items%5B5%5D%5BAssigned%5D=false&models%5B0%5D.LifeCycle.Items%5B5%5D%5BLifeCycleAbbreviation%5D=Pb&models%5B0%5D.LifeCycle.SelectedLifeCycleCsvList=Nb%2CRw
Thanks!
Danny