Форма редактирования позволяет не только создавать новый объект с нуля, но и создать объект, в котором некоторые поля уже заполнены.
Чтобы открыть web-форму редактирования с передачей объекта с частично заполненными полями, необходимо произвести POST-запрос по адресу формы редактирования с параметром DataObject
. Значение параметра DataObject
- объект данных, сериализованный в XML и закодированный в HTML.
Никаких ограничений на передаваемый объект данных не налагается. Статус передаваемого объекта не играет роли, т.к. после передачи и десериализации объекта он устанавливается в ObjectStatus.Created
.
Сериализация объекта производится с помощью ICSSoft.STORMNET.Tools.ToolXML
подробнее d cnfnmt ICSSoft.STORMNET.Tools.XmlTools.
После сериализации XML необходимо закодировать в HTML для безопасной передачи данных. Eсли ASP.NET Request Validation
увидит угловые скобочки, то может кинуть исключение A potentially dangerous Request.Form value was detected from the client
; подробнее об этом на сайте www.asp.net и social.msdn.microsoft.com. Закодировать можно с помощью Server.HTMLEncode или HttpUtility.HtmlEncode.
Пример
// Сериализация объекта данных для POST-запроса на сервере
var xmldoc = ICSSoft.STORMNET.Tools.ToolXML.DataObject2XMLDocument(ref dobj);
string serializedObj = System.Web.HttpUtility.HtmlEncode(xmldoc.InnerXml);
// Открытие формы редактирования на клиенте
var data = { 'DataObject': serializedObj };
var editformUrl = 'MyObjectE.aspx';
openUrlWithPost(editformUrl, data);
function openUrlWithPost (url, params, target) {
var form = document.createElement("form");
form.setAttribute("method", "post");
form.setAttribute("action", url);
form.setAttribute("target", target || "_blank");
for (var key in params) {
if (params.hasOwnProperty(key)) {
var input = document.createElement('input');
input.type = 'hidden';
input.name = key;
input.value = params[key];
form.appendChild(input);
}
}
form.submit();
};