Asp.net mvc jqGrid for MVC并非所有值都在编辑时通过

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

我正在尝试用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 = "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) {

                }
            }
        }