Моя сетка отредактирована в встроенном режиме. очевидно, когда kendo не обнаруживает изменения в строке d, событие обновления не будет запущено. Мне нужно вызвать событие обновления, даже если в строке не было внесено никаких изменений, потому что изменение будет обработано в d-контроллере.вручную Установить Kendo asp.net строка сетки mvc для обновления
Я нашел этот пост Manual row change, но я не знаю, как это сделать. im, используя kendo mvc, а не kendo js.
мой взгляд
@(Html.Kendo().Grid<OrderViewModel>()
.Name("orders")
.HtmlAttributes(new { style = "height: 700px; border: 0;" })
.Scrollable()
.Columns(columns =>
{
columns.Template(t => { })
.ClientTemplate("#=OrderID#")
.Title("ORDER ID")
.Width(120);
columns.Bound(f => f.OrderDate)
.Title("ORDER DATE")
.Format("{0:d}")
.Width(150);
columns.Bound(f => f.RequiredDate)
.Title("REQUIRED DATE")
.Format("{0:d}")
.Width(150);
columns.ForeignKey(f => f.CustomerID, (System.Collections.IEnumerable)ViewData["customers"], "CustomerID", "CompanyName")
.Title("REQUEST BRANCH")
.Width(200);
columns.ForeignKey(f => f.ShipVia, (System.Collections.IEnumerable)ViewData["shippers"], "ShipperID", "CompanyName")
.Title("CMU")
.Width(150); ;
columns.ForeignKey(f => f.EmployeeID, (System.Collections.IEnumerable)ViewData["employees"], "EmployeeID", "EmployeeName")
.Title("REQUESTED BY")
.Width(250);
columns.Bound(f => f.ShipCountry)
.Title("ORDER STATUS")
.ClientTemplate("<div class='country #=ShipCountry#'></div>#=ShipCountry#")
.Width(150);
columns.Command(commands =>
{
commands.Edit()
.Text("Approve Order")
.UpdateText("Approve")
.CancelText("Cancel");
}).Width(200);
})
.Editable(e => e.Mode(GridEditMode.InLine))
.Events(e => e
.DataBound("onDataBound")
)
.Pageable(pageable => pageable.Refresh(true))
.Sortable()
.Selectable()
.Navigatable()
.Filterable()
.ClientDetailTemplateId("Order_DetailTemplate")
.DataSource(dataSource => dataSource
.Ajax()
.PageSize(20)
.Model(m =>
{
m.Id(f => f.OrderID);
m.Field(f => f.OrderID).DefaultValue(-42);
m.Field(f => f.OrderID).Editable(false);
m.Field(f => f.OrderDate).Editable(false);
m.Field(f => f.CustomerID).Editable(false);
m.Field(f => f.EmployeeID).Editable(false);
m.Field(f => f.ShipCountry).Editable(false);
m.Field(f => f.ShipVia).Editable(false);
})
.Events(e => e.Error(@<text>
function (e) {
onError(e, "orders");
}
</text>))
.Sort(s => s.Add(f => f.OrderDate).Descending())
.Read("Orders_Read", "Orders")
.Update("Orders_Approve", "Orders")
)
)
@{
Func<object, object> errorEvent = @<text>
function(e) {
if (e.errors) {
onError(e, "order_details#=OrderID#");
}
}
</text>;
}
<script id="Order_DetailTemplate" type="text/x-kendo-tmpl">
<h4>Details for order \\##=OrderID# </h4>
@(Html.Kendo().TabStrip()
.Name("order_details_tabstrip_#=OrderID#")
.Items(items =>
{
items.Add()
.Text("CURRENCIES")
.Selected(true)
.Content(@<text>
@(Html.Kendo().Grid<OrderDetailViewModel>()
.Name("order_details#=OrderID#")
.Columns(columns =>
{
columns.ForeignKey(f => f.ProductID, (System.Collections.IEnumerable)ViewData["products"], "ProductID", "ProductName")
.Title("CURRENCY NAME")
.EditorTemplateName("CustomGridForeignKey");
columns.Bound(f => f.UnitPrice)
.Format("{0:c}")
.Title("UNIT PRICE")
.Width(220);
columns.Bound(f => f.Quantity)
.Title("AMOUNT")
.Width(220)
.ClientFooterTemplate("Grand total:");
columns.Template(f => new { })
.Title("TOTAL")
.ClientTemplate("\\#=kendo.toString(GetOrderItemPrice(data), \"c\")\\#")
.ClientFooterTemplate("<span name='sum'></span>").Width(120);
})
.Events(e =>
{
e.DataBound("onOrderDetailsDataBound");
e.DetailInit("onDetailInit");
e.Edit("onOrderDetailsEdit");
})
.Selectable()
.Pageable(pageable => pageable.Refresh(true))
.Navigatable()
.ClientDetailTemplateId("Product_DetailTemplate")
.DataSource(dataSource => dataSource
.Ajax()
.Model(model =>
{
model.Id(detail => detail.OrderDetailID);
})
.Events(e => e.Error(errorEvent))
.Read("OrderDetails_Read", "OrderDetails", new { OrderID = "#=OrderID#" })
).ToClientTemplate()
)</text>);
items.Add()
.Text("MOVEMENT DETAILS")
.Content(@<text>
<div class='shipping-details'>
<ul>
<li><label>Name:</label>#= ShipName #</li>
<li><label>OrderStatus:</label>#= ShipCountry #</li>
<li><label>City:</label>#= ShipCity #</li>
<li><label>Address:</label>#= ShipAddress #</li>
<li><label>Postal Code:</label>#= ShipPostalCode #</li>
</ul>
</div>
</text>);
})
.ToClientTemplate()
)
</script>
и мой контроллер:
public ActionResult Orders_Approve([DataSourceRequest]DataSourceRequest request, OrderViewModel order)
{
if (ModelState.IsValid)
{
using (var northwind = new NCashEntities())
{
var entity = northwind.ORDERS.FirstOrDefault(o => o.ORDERID == order.OrderID);
if (entity == null)
{
string errorMessage = string.Format("Cannot update record with OrderID:{0} as it's not available.", order.OrderID);
ModelState.AddModelError("", errorMessage);
}
else
{
entity.CUSTOMERID = order.CustomerID;
entity.EMPLOYEEID = order.EmployeeID;
entity.ORDERDATE = order.OrderDate;
entity.SHIPCOUNTRY = "Approved";
entity.SHIPVIA = order.ShipVia;
entity.SHIPPEDDATE = order.ShippedDate;
entity.SHIPNAME = order.ShipName;
entity.SHIPADDRESS = order.ShipAddress;
entity.SHIPCITY = order.ShipCity;
entity.SHIPPOSTALCODE = order.ShipPostalCode;
northwind.ORDERS.Attach(entity);
northwind.Entry(entity).State = System.Data.Entity.EntityState.Modified;
northwind.SaveChanges();
}
}
}
return Json(new[] { order }.ToDataSourceResult(request, ModelState));
}
Почему вы хотите что-то сэкономить, если ничего не изменилось? Вы хотите, чтобы это поведение по умолчанию для всех изменений для этой сетки? –
Спасибо, Дэвид, посмотри на это так ... это похоже на одобренный вид заказа. одобрение ничего не изменит в заказе. Но статус будет изменен на «Approved» в контроллере. Это поведение по умолчанию для всех изменений для этой конкретной сетки. – Laolu