Asp.net mvc jqGrid for MVC并非所有值都在编辑时通过
我正在尝试用MVC实现jqGrid 模型是:Asp.net mvc jqGrid for MVC并非所有值都在编辑时通过,asp.net-mvc,jqgrid,Asp.net Mvc,Jqgrid,我正在尝试用MVC实现jqGrid 模型是: public class InvoiceHeader { public int id { get; set; } public DateTime invdate { get; set; } public int clientid { get; set; } public decimal amount { get; set; } [Display(Name = "I
public class InvoiceHeader
{
public int id { get; set; }
public DateTime invdate { get; set; }
public int clientid { get; set; }
public decimal amount { get; set; }
[Display(Name = "Invoice Number:")]
public int tax { get; set; }
public decimal total { get; set; }
[Required(ErrorMessage = "Note is a required field.")]
[Display(Name = "Note:")]
public string note { get; set; }
public int PaymentTypeId { get; set; }
public string CreatedByUsername { get; set; }
public virtual PaymentType PaymentType { get; set; }
}
我的看法是:
@model JQGRID.Models.InvoiceHeader
@{
ViewBag.Title = "Home Page";
}
@*<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />*@ <title>My First
Grid</title>@*<link rel="stylesheet" type="text/css" media="screen" href="css/ui-lightness/jquery-ui-1.7.1.custom.css" />*@
<link rel="stylesheet" type="text/css" media="screen" href="../../Scripts/css/ui.jqgrid.css" />
<link rel="stylesheet" type="text/css" media="screen" href="../../Scripts/css/ui.multiselect.css" />
@*<link rel="stylesheet" type="text/css" media="screen" href="../../Content/themes/ui-lightness/jquery-ui-1.8.14.custom.css" />*@
<style>
html, body
{
margin: 0;
padding: 0;
font-size: 75%;
}
</style>
<script src="../../Scripts/js/jquery-1.5.2.min.js" type="text/javascript"></script>
<script src="../../Scripts/js/i18n/grid.locale-en.js" type="text/javascript"></script>
<script src="../../Scripts/js/jquery.jqGrid.min.js" type="text/javascript"></script>
@*<script src="../../Scripts/src/grid.inlinedit.js" type="text/javascript"></script>*@
<script type="text/javascript">
jQuery(document).ready(function () {
jQuery("#list").jqGrid({
url: '/Home/DynamicGridData/',
datatype: 'json',
mtype: 'POST',
colNames: ['id', 'note', 'tax', 'PaymentType', 'CreatedByUsername', 'Actions'],
colModel: [
{ name: 'id', index: 'id', hidden: true, editable: false },
{ name: 'note', index: 'note', width: 40,align:'center', editable: true, editrules: { required : true } },
{ name: 'tax', index: 'tax', width: 400, align: 'center', editable: true, editrules: { required : true } },
{ name: 'PaymentTypeId', index: 'PaymentTypeId', width: 400, align: 'center', editable: true, edittype:"select",
editoptions: { dataUrl: '/Home/PaymentTypes/' }},
{ name: 'CreatedByUsername', index: 'CreatedByUsername', hidden: true, editable: false },
{ name: 'act',index:'act',width:55,align:'center',sortable:false,formatter:'actions',
formatoptions:{
keys: true, // we want use [Enter] key to save the row and [Esc] to cancel editing.
beforeSubmit:function(postdata, formid) {
alert("Hi");
jQuery("#ValidationSummary").show('slow');
},
},}
],
pager: jQuery('#pager'),
rowNum: 10,
rowList: [5, 10, 20, 50],
sortname: 'Id',
sortorder: "desc",
viewrecords: true,
imgpath: '',
caption: 'My first grid',
editurl: '/Home/Save/'
});
jQuery("#list").navGrid('#pager', { edit: false, search: false, add: true });
});
</script>
@using (Html.BeginForm()) {
@Html.ValidationSummary()
<table id="list">
</table>
<div id="pager">
</div>}
我不明白的是,为什么当您输入此方法并选中invoiceHeader
properties时,会填充id属性,但不会填充CreatedByUsername
属性
我真的需要这个属性来保存
有人能给我解释一下为什么会这样以及我如何填充
CreatedByUsername
吗?您在保存操作中检查了Id对象的值吗?它们应该是网格中的行id,而不是正在编辑的对象的实际id
为了防止出现这种情况,您应该尝试为
Id
和CreatedByUserName
列添加列,并使它们不可见。另外,在Id列中添加一个key:true
值。这样,在编辑时,这些值将从这些列中填充。Hi我做了您建议的更改,如上所示,除了关键部分。当我添加关键部分时,网格不再可编辑。CreatedByUsername仍以null形式通过。很好的一点是,Id是行Id,检查了它,您是正确的。谢谢太好了,现在起作用了。我现在已经将id key:true设置为true,并且没有将其设置为可编辑。谢谢你的帮助。非常感谢!:)
public void Save(InvoiceHeader invoiceHeader)
{
if (ModelState.IsValid) {
...
try {
context.SaveChanges();
}
catch (Exception ex) {
}
}
}