2011-12-19 3 views
2

Удивительно, что кто-то использовал jQgrid для размещения динамических данных из другой формы на одной странице. Динамический в том, что я не знаю входных имен для публикации, но скорее хотел бы опубликовать всю сериализованную форму при рендеринге сетки.jQgrid отправка пользовательских данных при загрузке

Я дошел до установки дополнительных данных в postData, но он не попадает в URL правильно, поскольку он выглядит двойным URL-кодом. См:

$(document).ready(function() { 
    $("#rpt").jqGrid( 
    { url:'/get.json', 
    postData: {filter: $('form').serialize()}, 
    datatype: "json", 
    gridview: true, 
    colModel:[id:'col1'] 
}); 
}); 

С помощью различных нитей здесь и на других сайтах, я попробовал предложенный JSON.stringify и serializearray() в форме, а также пользовательские функции безрезультатно. Данные формы выглядят закодированными и недоступны с другой стороны через _GET.

Любые предложения были бы замечательными - спасибо!

ответ

1

Я не уверен, в какой форме вы хотите получить данные из формы на стороне сервера. Тем не менее, я хотел бы предложить вам использовать postData в следующем виде

postData: { 
    filter: function() { 
     var result = {}, i, item, 
      formInfo = $('form#myForm').serializeArray(), 
      l = formInfo.length; 
     for (i = 0; i < l; i++) { 
      item = formInfo[i]; 
      result[item.name] = item.value; 
     } 

     return JSON.stringify(result); 
    } 
} 

В случае следующей формы тест

<form id="myForm"> 
    <div><input type="text" name="a" value="1 from a" id="a" /></div> 
    <div><input type="text" name="b" value="2 from b" id="b" /></div> 
    <div><input type="hidden" name="c" value="3 from c" id="c" /></div> 
    <div> 
    <textarea name="d" rows="8" cols="40">4</textarea> 
    </div> 
    <div><select name="e"> 
    <option value="5" selected="selected">5</option> 
    <option value="6">6</option> 
    <option value="7">7</option> 
    </select></div> 
    <div> 
    <input type="checkbox" name="f" value="8" id="f" /> 
    </div> 
</form> 

Переменная result будет

var result = { 
    a: "1 from a", 
    b: "2 from b", 
    c: "3 from c", 
    d: "4", 
    e: "5" 
} 

Так без преобразования данные будут выполнены. Затем я предлагаю преобразовать объект result в строку JSON, используя JSON.stringify. (В зависимости от кода сервера он может быть не нужен.) Таким образом, параметр filters будет послан как

{"a":"1 from a","b":"2 from b","c":"3 from c","d":"4","e":"5"} 

Вы можете использовать Fiddler или Firebug для изучения HTTP трафика соответствующего малого demo.

+0

Здравствуйте, Олег! Я попытался отправить данные всей формы в качестве параметра поиска в данные POST и попытался получить то же самое, что и строго типизированная модель в контроллере MVC. Но я потерпел неудачу. Вот мой пост http://stackoverflow.com/questions/14522263/post-form-with-jqgrid-in-asp-net-mvc-3. Было бы очень полезно, если вы поделитесь своей идеей для достижения этой цели? –

+0

@Murali: Я должен сделать некоторые срочные работы для одного моего клиента. Позже я попытаюсь прочитать вам вопрос, и я постараюсь вам помочь. Не могли бы вы добавить свой вопрос более подробно? Например, определение 'SearchViewModel' и HTML-фрагмента формы с идентификатором' id = "search-form". Вы анализировали в отношении [Fiddler] (http://www.fiddler2.com/Fiddler2/version.asp), [Firebug] (http://getfirebug.com/) или инструментов разработчика IE или Chrome, которые точно HTTP запрос был отправлен на сервер? Вы также можете указать детали запроса и ответ с сообщением об ошибке. – Oleg

+0

Я обновил свой вопрос с помощью модели и формы представления и другой необходимой информации. Я уже видел свои параметры запроса на отправку сообщений с помощью Firebug, и я могу получить его в контроллере как строку JSON с помощью Request ["PostData"], но я могу получить его как строго типизированное путем простого извлечения метода метода viewModel, а затем viewModel. Имя и т. Д.? –

Смежные вопросы