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);
}
答案 0 :(得分:1)
如果我理解您的问题,您可以使用beforeProcessing
或loadComplete
回调根据服务器的响应填写表单数据。两个回调(data
或beforeProcessing
)的第一个loadComplete
参数将包含从服务器返回的所有数据。因此,您可以访问document
data
的{{1}}属性,其格式与服务器上的格式相同。
我不确定您使用document
类型的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);
}
}
}