This is a migrated thread and some comments may be shown as answers.

Can't save value from Dropdown List on Grid

1 Answer 406 Views
Grid
This is a migrated thread and some comments may be shown as answers.
Trish
Top achievements
Rank 1
Trish asked on 21 Jul 2020, 08:11 PM

I'm having trouble saving the value that's selected in the drop down list on a grid.  It's as though the model doesn't update.  The drop down list comes up when I click the edit button.  The drop down is populated, but when I hit update and the code makes it to UpdateAdHocOrderDetails, but both the MailingListId and MailingListName are what they were before the update.  What have I missed wiring up or what did I wire up incorrectly?

Code in my view....

<div class="content">
@(Html.Kendo()
.Grid<IndexViewModel>()
.Name("kendoGrid")
.Columns(columns =>
{
columns.Bound(c => c.OrderDetail.Isbn).Title("ISBN").Width(135);
columns.Bound(c => c.OrderDetail.Title).Width(300);
columns.Bound(c => c.OrderDetail.Author).Width(125);
columns.Bound(c => c.OrderDetail.CartonQuantity).Title("Carton QTY").Width(140);
columns.Bound(c => c.OrderDetail.OrderedQuantity).Title("QTY").Width(90);
columns.Bound(c => c.OrderDetail.MailingListName).Title("Mailing List").ClientTemplate("#=OrderDetail.MailingListName#").Width(90);
columns.Bound(c => c.OrderDetail.OnHand).Title("On Hand QTY").Width(90);
columns.Bound(c => c.OrderDetail.AMROM).Title("ROM").Width(140);
columns.Bound(c => c.OrderDetail.SuggestedQuantity).Title("Recommended Order QTY").Width(140);
columns.Command(command => { command.Edit(); command.Destroy(); }).Width(150);
})
.ToolBar(toolbar => toolbar.Custom().Text("Clear All Filters").Url("#").HtmlAttributes(new { onclick = "ClearAllFilters('kendoGrid')", @class = "k-primary" }))
.Scrollable()
.Sortable()
.Filterable()
.Editable(editable => editable.Mode(GridEditMode.InLine).ConfirmDelete("test").DisplayDeleteConfirmation(true))
.Pageable(pageable => pageable
.Refresh(true)
.ButtonCount(5))
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(12)
.Model(model => {
model.Id(p => p.OrderDetail.OrderDetailId);
model.Field(p => p.OrderDetail.OrderDetailId).Editable(false);
model.Field(p => p.OrderDetail.Isbn).Editable(false);
model.Field(p => p.OrderDetail.Title).Editable(false);
model.Field(p => p.OrderDetail.Author).Editable(false);
model.Field(p => p.OrderDetail.CartonQuantity).Editable(false);
model.Field(p => p.OrderDetail.OrderedQuantity).Editable(true);
model.Field(p => p.OrderDetail.MailingListName).Editable(true);
model.Field(p => p.OrderDetail.OnHand).Editable(false);
model.Field(p => p.OrderDetail.AMROM).Editable(false);
model.Field(p => p.OrderDetail.SuggestedQuantity).Editable(false);
})
.Sort(sort => sort.Add(order => order.OrderDetail.OrderDetailId).Descending())
.Read(read => read.Action("GetAdHocOrderDetails", "Adhoc").Data("gridInfo"))
.Update(update => update.Action("UpdateAdHocOrderDetails", "Adhoc").Data("gridInfo"))
.Destroy(update => update.Action("RemoveAdHocOrderDetails", "Adhoc").Data("gridInfo"))
.Events(events => {
events.Change("OnGridChange");
events.Error("error_handler");
})
.ServerOperation(false))
.Events(events => events.DataBound("onDataBound"))
.Resizable(resize => resize.Columns(true))
)
</div>

Code in Views\Shared\EditorTemplates\MailingListEditor.cshtml.....

@(
Html.Kendo().DropDownListFor(model => model.OrderDetail.MailingListName)
.Name("MailingListName")
.DataTextField("MailingListName")
.DataValueField("MailingListId")
.OptionLabel("Select a mailing list...")
.DataSource(source =>
{
source.Read(read => { read.Action("GetMailingLists", "Adhoc"); });
}))
)

Code in the model....

        [UIHint("MailingListEditor")]
        public string MailingListName { get; set; }
        public int MailingListId { get; set; }

Code in the controller....

        [AcceptVerbs(HttpVerbs.Post)]
        [AuthorizeUser(AccessLevel = "Publisher")]
        public ActionResult UpdateAdHocOrderDetails([DataSourceRequest] DataSourceRequest request, IndexViewModel lineItem, int orderId)
        {

        }

1 Answer, 1 is accepted

Sort by
0
Anton Mironov
Telerik team
answered on 23 Jul 2020, 02:02 PM

Hello, Trish,

Thank you for the provided code.

In general, when the DropDownList is an editor for a field that has a primitive data type, the ValuPrimitive option has to be set. Also, the DataTextField and the DataValueField have to match:

@(
Html.Kendo().DropDownListFor(model => model.OrderDetail.MailingListName)
.Name("MailingListName")
.DataTextField("MailingListName")
.DataValueField("MailingListId")
.OptionLabel("Select a mailing list...")
.ValuePrimitive(true)
.DataSource(source =>
{
source.Read(read => { read.Action("GetMailingLists", "Adhoc"); });
}))
)
Could you try the approach above and if the issue persists send me a sample project with the faulty behavior in this thread. 

 

Kind Regards,
Anton Mironov
Progress Telerik

Tags
Grid
Asked by
Trish
Top achievements
Rank 1
Answers by
Anton Mironov
Telerik team
Share this question
or