更新:我還沒有想出任何東西。它肯定似乎應該按照它的方式工作。MVC 3 Telerik Grid不會返回視圖模型的時間戳
我有一個telerik網格,我已經綁定到視圖模型。網格基本上顯示了Vehicle對象的名稱和類型。在數據鍵中,我添加了VehicleID和Timestamp字段。當網格發佈ajax更新時,時間戳字段爲空。
我已驗證視圖模型中的時間戳字段在傳遞給視圖時有一個值。
下面是相關代碼:
查看:
...
@(Html.Telerik().Grid(Model)
.Name("Grid")
.Columns(columns =>
{
columns.Bound(o => o.VehicleID).Visible(false);
columns.Bound(o => o.VehicleName);
columns.Bound(o => o.VehicleType);
})
.DataBinding(dataBinding =>
{
dataBinding.Server().Select("Index", "Vehicle");
dataBinding.Ajax().Select("_Index", "Vehicle").Enabled(true);
dataBinding.Ajax().Update("_SaveVehicle", "Vehicle");
dataBinding.Ajax().Delete("_DeleteVehicle", "Vehicle");
})
.Scrollable(scrolling => scrolling.Enabled(true))
.Sortable(sorting => sorting.Enabled(true))
.Pageable(paging =>
paging.Enabled(true)
.PageSize(20)
.Position(GridPagerPosition.Bottom))
.Filterable(filtering => filtering.Enabled(true))
.Groupable(grouping => grouping.Enabled(true))
.Footer(true)
.ToolBar(toolbar => toolbar.Template(
@<text>
@using (Html.BeginForm("ExportCsv", "Vehicle", FormMethod.Post, new {id = "export"}))
{
<text>
<input type="submit" value="Export to CSV" id="export" />
</text>
}
<label class="error">@ViewBag.AjaxErrorMessage</label>
</text>
))
.Columns(columns =>
{
columns.Command(command =>
{
command.Custom("details").Text("Details").Action("Edit", "Vehicle").HtmlAttributes(new { style = "text-align: center" }) ;
command.Edit().ButtonType(GridButtonType.Image);
command.Delete().ButtonType(GridButtonType.Image);
}).Width(165);
})
.DataKeys(dataKeys =>
{
dataKeys.Add(key => key.Timestamp).RouteKey("Timestamp");
dataKeys.Add(key => key.VehicleID).RouteKey("VehicleID");
})
.ClientEvents(events => events.OnEdit("onEdit"))
.ColumnContextMenu()
.Resizable(config =>
{
config.Columns(true);
})
.Reorderable(config =>
{
config.Columns(true);
})
)
<script type = "text/javascript">
function onEdit(e) {
$(e.form).find('#VehicleType').data('tDropDownList').select(function (dataItem) {
return dataItem.Text == e.dataItem['vehicleType'];
});
}
</script>
視圖模型:
using System;
using System.ComponentModel.DataAnnotations;
namespace ShopLog.ViewModels
{
public class VehicleIndexViewModel
{
//public IEnumerable<Vehicle> Vehicles { get; set; }
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid VehicleID { get; set; }
[Timestamp]
public Byte[] Timestamp { get; set; }
[Required]
[Display(Name = "Vehicle Name")]
[MaxLength(30, ErrorMessage = "The {0} must be no more than {2} characters long.")]
public string VehicleName { get; set; }
[Display(Name = "Fuel Type")]
[StringLength(30, ErrorMessage = "\"{0}\" must be no more than {1} characters long.")]
public string FuelType { get; set; }
[Display(Name = "Notes")]
[DataType(DataType.MultilineText)]
public string Notes { get; set; }
[UIHint("VehicleType")]
[Display(Name = "Type")]
public string VehicleType { get; set; }
[Display(Name = "Transmission Type")]
public String TransmissionType { get; set; }
}
}
控制器郵編爲更新 在把斷點第一行顯示了th e vehicleIndexViewModel的timestamp屬性爲null。我試圖從formcollection中獲取Timestamp,但它在那裏也是null。
[AcceptVerbs(HttpVerbs.Post)]
[GridAction]
public ActionResult _SaveVehicle(VehicleIndexViewModel vehicleIndexViewModel, FormCollection formcollection)
{
if (TryUpdateModel(vehicle))
{
try
{
//Delete the record
db.Entry(vehicle).State = EntityState.Modified;
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
ViewBag.AjaxErrorMessage = "That record has been edited by someone else since you started editing it.";
}
catch (DataException)
{
ViewBag.AjaxErrorMessage = "Error saving data, please try again.";
}
}
//Rebind the grid
PopulateVehicleTypes();
return View(new GridModel(GetIndexViewData()));
}
謝謝!