Я думаю, что ваша проблема заключается в следующем:
data: {test_form},
, чтобы проверить, получаете ли вы какой-либо файл на стороне сервера, распечатайте вывод переменной файла:
echo var_dump( Я думаю, что ваша проблема заключается в следующем:
[110] , чтобы проверить, получаете ли вы какой-либо файл на стороне сервера, распечатайте вывод переменной файла:
[111] и запишите вашего результата.
Но:
у меня есть другой скрипт для обработки всех элементов формы:
function ToAjax(form) { //target form
var jsonObj = [];
var formData = new FormData();
//Form element
$('[name="' + form + '"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], :input[type=checkbox]:not(:checked)').filter(':input').each(function(obj, v) {
var iObj = {};
var input = $(this);
var inputname = input.attr("name");
if (typeof inputname !== typeof undefined && inputname !== false) { //handle attribute names
inputname = inputname.replace(/-/g, '_'); //handle underscore
var val = input.val();
var inputval = val;
iObj[inputname] = inputval;
jsonObj.push(iObj);
}
});
//Summernote textarea editor
$('[name="' + form + '"] *').filter('div.sumertextarea').each(function(obj, v) {
var iObj = {};
var input = $(this);
var inputname = input.attr("data-name");
inputname = inputname.replace(/-/g, '_');
var val = input.summernote('code');
var inputval = val;
iObj[inputname] = inputval;
jsonObj.push(iObj);
});
//compres in json data
jsonData = JSON.stringify(jsonObj);
//parse json to formdata
formData.append('jsonData', jsonData);
//handle all file types input
$('[name="' + form + '"] *').filter(':input[type=file]').each(function(obj, v) {
if (typeof v.files[0] != 'undefined') {
var file = v.files[0];
var name = $(v).attr("name");
name = name.replace(/-/g, '_');
formData.append(name, file);
}
});
//handle all File type from dropzone plugin
$('[name="' + form + '"] *').filter('div.dropzone').each(function() {
var DropFile = $(this)[0].dropzone.getAcceptedFiles();
for (Nof in DropFile) {
var file = DropFile[Nof];
var name = DropFile[Nof].name;
name = name.replace(/-/g, '_');
formData.append(name, file);
}
});
//send all data packet to send ajax function.
window.SendAjax(formData);
}
для отправки на серверную часть я использую это:
function SendAjax(formdata) {
var url = 'index.php';
$.ajax({
url: url,
data: formdata,
contentType: false,
processData: false,
type: 'POST',
cache: false,
error: function(xhr, status, error) {
console.log(error);
alert(error);
},
success: function(resp) {
console.log(resp);
alert(resp);
}
});
}
и да, я использую contenType: false
вместо contentType: 'multipart/form-data',
, потому что я могу более легко обрабатывать данные на стороне сервера, чтобы получить доступ к файлам, которые у вас есть 2 seccion file sistema или dropzone plugin проверьте разницу в массиве результатов и позаботьтесь об адаптации или используйте ее в своем проекте:
2 примера файла отправляют одновременно PDF и JPG этот выходной тест плагина $ _FILES для общей формы и плагина:
[ 114] С плагином dropzone:
["test_jpg"]=>
array(5) {
["name"]=>
string(10) "prueba.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(24) "C :\ xampp\tmp\phpDDC7.tmp"
["error"]=>
int(0)
["size"]=>
int(8984)
}
["test_pdf"]=>
array(5) {
["name"]=>
string(10) "prueba.pdf"
["type"]=>
string(15) "application/pdf"
["tmp_name"]=>
string(24) "C :\ xampp\tmp\phpDDC8.tmp"
["error"]=>
int(0)
["size"]=>
int(180572)
}
FILES);
и запишите вашего результата.
Но:
у меня есть другой скрипт для обработки всех элементов формы:
function ToAjax(form) { //target form
var jsonObj = [];
var formData = new FormData();
//Form element
$('[name="' + form + '"] *').not(':input[type=file], :input[type=button], :input[type=submit], :input[type=reset], :input[type=checkbox]:not(:checked)').filter(':input').each(function(obj, v) {
var iObj = {};
var input = $(this);
var inputname = input.attr("name");
if (typeof inputname !== typeof undefined && inputname !== false) { //handle attribute names
inputname = inputname.replace(/-/g, '_'); //handle underscore
var val = input.val();
var inputval = val;
iObj[inputname] = inputval;
jsonObj.push(iObj);
}
});
//Summernote textarea editor
$('[name="' + form + '"] *').filter('div.sumertextarea').each(function(obj, v) {
var iObj = {};
var input = $(this);
var inputname = input.attr("data-name");
inputname = inputname.replace(/-/g, '_');
var val = input.summernote('code');
var inputval = val;
iObj[inputname] = inputval;
jsonObj.push(iObj);
});
//compres in json data
jsonData = JSON.stringify(jsonObj);
//parse json to formdata
formData.append('jsonData', jsonData);
//handle all file types input
$('[name="' + form + '"] *').filter(':input[type=file]').each(function(obj, v) {
if (typeof v.files[0] != 'undefined') {
var file = v.files[0];
var name = $(v).attr("name");
name = name.replace(/-/g, '_');
formData.append(name, file);
}
});
//handle all File type from dropzone plugin
$('[name="' + form + '"] *').filter('div.dropzone').each(function() {
var DropFile = $(this)[0].dropzone.getAcceptedFiles();
for (Nof in DropFile) {
var file = DropFile[Nof];
var name = DropFile[Nof].name;
name = name.replace(/-/g, '_');
formData.append(name, file);
}
});
//send all data packet to send ajax function.
window.SendAjax(formData);
}
для отправки на серверную часть я использую это:
function SendAjax(formdata) {
var url = 'index.php';
$.ajax({
url: url,
data: formdata,
contentType: false,
processData: false,
type: 'POST',
cache: false,
error: function(xhr, status, error) {
console.log(error);
alert(error);
},
success: function(resp) {
console.log(resp);
alert(resp);
}
});
}
и да, я использую contenType: false
вместо contentType: 'multipart/form-data',
, потому что я могу более легко обрабатывать данные на стороне сервера, чтобы получить доступ к файлам, которые у вас есть 2 seccion file sistema или dropzone plugin проверьте разницу в массиве результатов и позаботьтесь об адаптации или используйте ее в своем проекте:
2 примера файла отправляют одновременно PDF и JPG этот выходной тест плагина $ _FILES для общей формы и плагина:
[ 114]С плагином dropzone:
["test_jpg"]=>
array(5) {
["name"]=>
string(10) "prueba.jpg"
["type"]=>
string(10) "image/jpeg"
["tmp_name"]=>
string(24) "C :\ xampp\tmp\phpDDC7.tmp"
["error"]=>
int(0)
["size"]=>
int(8984)
}
["test_pdf"]=>
array(5) {
["name"]=>
string(10) "prueba.pdf"
["type"]=>
string(15) "application/pdf"
["tmp_name"]=>
string(24) "C :\ xampp\tmp\phpDDC8.tmp"
["error"]=>
int(0)
["size"]=>
int(180572)
}
Спасибо за Ваши ответы на сортировке. Я обратился к LINQ, чтобы помочь отсортировать динамично. Так как сетка знает, отсортировать ли ASC или DESC, и какое поле, я использовал Выражение LINQ. Выражение выполнило сортировку, и затем я просто связал те результаты со своим gridview.
Я подозреваю, что метод jQuery был бы быстрее, и не потребует полной обратной передачи.
using System.Linq.Expressions;
public SortDirection GridViewSortDirection
{
get
{
if (ViewState["sortDirection"] == null)
ViewState["sortDirection"] = SortDirection.Ascending;
return (SortDirection)ViewState["sortDirection"];
}
set { ViewState["sortDirection"] = value; }
}
protected void gridView_Sorting(object sender, GridViewSortEventArgs e)
{
//re-run the query, use linq to sort the objects based on the arg.
//perform a search using the constraints given
//you could have this saved in Session, rather than requerying your datastore
List<T> myGridResults = PerfomSearch();
if (myGridResults != null)
{
var param = Expression.Parameter(typeof(T), e.SortExpression);
var sortExpression = Expression.Lambda<Func<T, object>>(Expression.Convert(Expression.Property(param, e.SortExpression), typeof(object)), param);
if (GridViewSortDirection == SortDirection.Ascending)
{
myGridView.DataSource = myGridResults.AsQueryable<T>().OrderBy(sortExpression);
GridViewSortDirection = SortDirection.Descending;
}
else
{
myGridView.DataSource = myGridResults.AsQueryable<T>().OrderByDescending(sortExpression);
GridViewSortDirection = SortDirection.Ascending;
};
myGridView.DataBind();
}
}
Вы могли записать Сравнивание для своих объектов:
private int CompareObject(YourObject object1, YourObject object2)
{
int iReturnValue = 0;
if ((object1 != null) && (object2 != null) &&
(object1.SomeField != object2.SomeField))
{
iReturnValue = (object1.SomeField > object2.SomeField) ? 1 : -1;
}
return iReturnValue;
}
Затем, когда в Вашем событии сортировки просто передают в Сравнить функции в Вашу программу сортировки объектов (предполагающий, что у Вас есть что-то как Список).
// Your list of data from the session or viewstate or whereever you have it stored.
lstObjects.Sort(CompareObject);
У Вас теперь есть отсортированный список, поэтому просто снова переплетают его.
Корректный - необходимо будет обработать onsorting, отсортировать список и снова переплести.
Кроме того, Вы могли посмотреть на обработку стороны клиента сортировки с помощью платформы JavaScript как jQuery.
Корректный, необходимо обработать событие OnSorting и установить свойство AllowSorting на истинный.