我在使用JQGrid上传图片时遇到了问题。我想在将实际记录提交给服务器之前将文件内容保存到会话中。我尝试使用Ajaxuploadfile库[https://github.com/davgothic/AjaxFileUpload]上传文件,但它给出了错误
未捕获的TypeError:无法读取未定义的属性“0”
我是Jqgrid的新手。我们将非常感谢您的帮助
以下是我的代码:
$("#grid").jqGrid({
url: "/PatchItem/Index2",
datatype: 'local',
data: mydata,
colNames: ['Name', 'Patch GroupName', 'Description', 'ImageId', 'SortOrder'],
colModel: [
{ key: false, name: 'Name', index: 'Name', editable: true },
{
key: false, name: 'PatchGroupName', index: 'PatchGroupName', editable: true, edittype: 'select', editoptions: {
dataUrl: "/PatchItem/GetPatchGroupList",
buildSelect: function (data) {
var response = $.parseJSON(data);
var s = '<select id="patchGroup" name="patchGroup">';
if (response && response.length) {
for (var i = 0, l = response.length; i < l; i++) {
if (name == response[i])
s += '<option value="' + response[i] + '" selected=selected>' + response[i] + '</option>';
else
s += '<option value="' + response[i] + '">' + response[i] + '</option>';
}
}
return s + "</select>";
}
}
},
{ key: false, name: 'Description', index: 'Description', editable: true },
{
key: false, name: 'ImageId', index: 'ImageId', edittype: 'file', editoptions: {
enctype: "multipart/form-data"
}, editable: true, formatter: function (name) {
return "<img src='/Image/GetImage/" + name + "' alt='my image' style='width:40px';height:40px' />";
}
},
{ key: false, name: 'SortOrder', index: 'SortOrder', editable: true }
],
pager: jQuery('#pager'),
mtype: "POST",
loadonce: true,
gridview: true,
autoencode: true,
rowNum: 10,
rowList: [10, 20, 30, 40],
height: '100%',
viewrecords: true,
caption: 'Patch Item List',
emptyrecords: 'No records to display',
jsonReader: {
root: "rows",
page: "page",
total: "total",
records: "response",
repeatitems: false,
Id: "0"
},
autowidth: true,
multiselect: false
}).navGrid('#pager', { edit: false, add: true, del: false, search: false, refresh: true },
{
// edit options
zIndex: 100,
url: '/PatchItem/Edit',
closeOnEscape: true,
closeAfterEdit: true,
recreateForm: true,
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
}
}
},
{
// add options
zIndex: 100,
url: "/PatchItem/New_Save",
mtype: "POST",
closeOnEscape: true,
closeAfterAdd: true,
beforeSubmit: function (response, postdata) {
/// UploadImage1();
// UploadImage(response, postdata);
$('#ImageId').AjaxFileUpload({
url: 'UploadImage/PatchImage',
secureuri: false,
fileElementId: 'ImageId',
type: 'POST',
dataType: 'json',
async: false,
data: { imageType: 'PatchImage' },
success: function (data, status) {
alert("Upload Complete.");
},
error:function(response)
{
console.log(response)
}
});
},
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
}
}
}
,
{
// delete options
zIndex: 100,
url: "/PatchItem/delete",
closeOnEscape: true,
closeAfterDelete: true,
recreateForm: true,
msg: "Are you sure you want to delete this task?",
afterComplete: function (response) {
if (response.responseText) {
alert(response.responseText);
}
}
}
);
});
这是我的服务器端代码:
[HttpPost]
//[Route("PatchItem/UploadImage/{imageType}")]
public JsonResult UploadImage(string imageType)
{
if (User == null)
{
return null;
}
try
{
foreach (string file in Request.Files)
{
var fileContent = Request.Files[file];
if (fileContent != null && fileContent.ContentLength > 0)
{
// get a stream
using (MemoryStream inputMs = new MemoryStream())
{
fileContent.InputStream.CopyTo(inputMs);
inputMs.Seek(0, SeekOrigin.Begin);
try
{
using (System.Drawing.Image image = System.Drawing.Image.FromStream(inputMs))
{
KrakenClient client =
new KrakenClient(ConfigurationManager.AppSettings["Kraken.Api.Key"],
ConfigurationManager.AppSettings["Kraken.Api.Secret"]);
string warning = this.CheckImageFormat(image, imageType);
inputMs.Seek(0, SeekOrigin.Begin);
var img = Business.Image.Resize(inputMs.ToArray(), imageDimensions[imageType].Width, imageDimensions[imageType].Height);
try
{
img = client.OptimizeImage(img, true).OptimizedImage;
}
catch
{
// do nothing by design
}
if (!(Session["Img_" + imageType] is Dictionary<string, ImageInformationModel>))
{
Session["Img_" + imageType] = new Dictionary<string, ImageInformationModel>();
}
Guid newId = Guid.NewGuid();
FileInfo fInfo = new FileInfo(fileContent.FileName);
((Dictionary<string, ImageInformationModel>)Session["Img_" + imageType]).Add(newId.ToString("N"), new ImageInformationModel
{
Content = img,
Name = fInfo.Name
});
return Json(
new
{
Success = true,
Message = warning,
UploadedId = newId.ToString("N")
}, "text/plain");
}
}
catch (Exception)
{
return Json(
new
{
Success = false,
Message = "Falsches/unbekanntes Bildformat!"
}, "text/plain");
}
}
}
}
}
catch (Exception)
{
return null;
}
return null;
}