如何从jqgrid数据填充文档头

时间:2012-10-28 09:39:09

标签: c# jquery asp.net-mvc jqgrid

ASP .NET MVC2页面包含订单标题数据(订单号,客户,订单数据等):

<form id='_form' class='form-fields' action='' onsubmit='SaveDocument();return false;'>
<input id='Number' name='Number' />

<select id='PaymentTerm' name='PaymentTerm'>
<option value=''></option><option value='0'>Cash</option>
<option value='10'>10 days</option>
</select>

</form>

并在jqgrid中显示订单行。

我正在寻找一种从控制器中填充json日期的订单标题数据的方法 像jqgrid填充数据。 为了最小化请求,最好在jqgrid数据请求中返回头数据。 对于此附加参数,documentId将传递给控制器​​。

GetData将文档标题作为文档对象中的名称值对返回。 如何在jqgrid loadcomplete或其他地方的浏览器中将这些值分配给表单元素?

public JsonResult GetData(int page, int rows, string filters,
          int documentId )

{
    var query = ...;
    var totalRecords = query.Count();

    var documentHeader = new FormCollection();
    // In production code those values are read from database:
    documentHeader.Add("Number", 123);  // form contains input type='text' name='Number' element
    documentHeader.Add("PaymentTerm", "10"); // form contains select name='PaymentTerm' element
    ...

    return Json(new {
        total = page+1,
        page=page,
        document = documentHeader,
        rows = (from item in query
                select {
                    id = item.Id.ToString(),
                    cell = new[] {
                        item.ProductCode,
                        item.ProductName,
                        item.Quantity,
                        item.Price
                    }
                 }).ToList()
    },
    JsonRequestBehavior.AllowGet);
}

1 个答案:

答案 0 :(得分:1)

如果我理解您的问题,您可以使用beforeProcessingloadComplete回调根据服务器的响应填写表单数据。两个回调(databeforeProcessing)的第一个loadComplete参数将包含从服务器返回的所有数据。因此,您可以访问document data的{​​{1}}属性,其格式与服务器上的格式相同。

我不确定您使用document类型的FormCollection的原因。在我看来,使用匿名类型的数据是最原生的:

return Json(new {
    total = page + 1,
    page = page,
    document = new {
        number = 123,
        paymentTerm = 10
    },
    rows = (...)
},
JsonRequestBehavior.AllowGet);

document的确切类型可能并不那么重要。

beforeProcessingloadComplete内,您可以使用相同格式的data.document的相应属性。例如

beforeProcessing: function (data) {
    var hearderData = data.document;
    if (hearderData) {
        if (hearderData.number) {
            $("#Number").val(hearderData.number);
        }
        if (hearderData.paymentTerm) {
            $("#PaymentTerm").val(hearderData.paymentTerm);
        }
    }
}
相关问题