1

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);
}
4

1 回答 1

1

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

我不确定你为什么使用documenttype FormCollection。在我看来,使用匿名类型的数据是最原生的:

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

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

或者你beforeProcessing可以loadComplete只使用相同格式的相应属性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);
        }
    }
}
于 2012-10-28T10:24:04.640 回答