Итак, у меня есть приложение Silverlight, которое вызывает некоторые отчеты (.rdlc) через HTML-форму отправить. Эта форма является универсальной, поэтому я использую ее для вызова всех отчетов.Как удалить всех детей в HtmlElement с помощью Silverlight/C#
Теперь я хочу очистить входные элементы в нем каждый раз, когда форма была отправлена.
Так что я хочу четкую форму каждый раз, я хочу, чтобы вызвать новый отчет с нет детей в нем.
Может ли кто-нибудь объяснить, почему это не работает, если в форме имеется более 5 (или любых больших входов) входов?
public static void RemoveInputsFromForm(HtmlElement Form)
{
if (HtmlPage.Document.GetElementById(Form.Id) != null)
{
foreach (HtmlElement element in Form.Children)
{
if (element.Id != string.Empty)
{
element.Parent.RemoveChild(element);
}
}
}
}
Форма имеет это идентификатор и каждый вход имеет идентификатор, он удаляет некоторые входы случайно, другие оставаться в форме.
Это метод, который вставляет входные элементы в таком виде:
public static void AddInputToForm(HtmlElement Form, string Name, object Data)
{
if (Data != null && Data.ToString() != string.Empty)
{
var input = HtmlPage.Document.CreateElement("input");
input.SetProperty("type", "hidden");
input.SetProperty("value", Data.ToString());
input.SetProperty("name", Name);
input.SetProperty("id", Name);
Form.AppendChild(input);
}
}
Это метод, который я использую сейчас, чтобы удалить форму детей, это то же самое, как AddInputToForm
метод только то, что она удаляет входы
public static void RemoveInputFromForm(HtmlElement Form, string Name)
{
if (HtmlPage.Document.GetElementById(Name) != null)
{
Form.RemoveChild(HtmlPage.Document.GetElementById(Name));
}
}
Это метод, который получает свою форму
public static HtmlElement GetForm(string formUrl)
{
//in the html that holds the silverlight object, you must have a form named "reportform"
//<form id="reportform" action="" method="post" target="_blank" style="visibility: collapse" />
HtmlElement functionReturnValue = null;
//set form
functionReturnValue = HtmlPage.Document.GetElementById("reportform");
//set form action
functionReturnValue.SetProperty("action", formUrl);
return functionReturnValue;
}
Для воспроизведения коды (SomeElement является объектом со строковыми свойствами):
//get form
var Form = GetForm(ApplicationUrl + @"Reports\Report.aspx");
//add parameters to form
AddInputToForm(Form, "id1", SomeElement.Id1Value);
AddInputToForm(Form, "id2", SomeElement.Id2Value);
AddInputToForm(Form, "id3", SomeElement.Id3Value);
AddInputToForm(Form, "id4", SomeElement.Id4Value);
AddInputToForm(Form, "id5", SomeElement.Id5Value);
AddInputToForm(Form, "id6", SomeElement.Id6Value);
AddInputToForm(Form, "id7", SomeElement.Id7Value);
AddInputToForm(Form, "id8", SomeElement.Id8Value);
AddInputToForm(Form, "id9", SomeElement.Id9Value);
//submit form
Form.Invoke("submit");
//clean report
RemoveInputFromForm(Form, "id1");
RemoveInputFromForm(Form, "id2");
RemoveInputFromForm(Form, "id3");
RemoveInputFromForm(Form, "id4");
RemoveInputFromForm(Form, "id5");
RemoveInputFromForm(Form, "id6");
RemoveInputFromForm(Form, "id7");
RemoveInputFromForm(Form, "id8");
RemoveInputFromForm(Form, "id9");
Таким образом, вы видите, что я должен удалить каждый ребенка я добавил с таким количеством вызовов, так как есть входы в форме, я хотел бы иметь только один звонок и чистый эта форма.
Заранее благодарен за любое решение.
У вас есть приложение Silverlight, которое динамически создает форму HTML для получения отчета RDLC? Звучит здорово, мне бы хотелось увидеть образец. –
Весь код, в котором вы нуждаетесь, находится в этом сообщении, вам просто нужно прочитать параметры запроса на странице aspx, содержащей файл .rdlc.Я сериализую объект и десериализую его на странице aspx. – Rumplin