Имея пользовательский элемент управления с формой, содержащей проверку, могу ли я проверить полностью на стороне сервера? - PullRequest
0 голосов
/ 02 апреля 2010

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

Теперь нам необходимо использовать все эти валидаторы, чтобы убедиться, что все необходимые данные вводятся при использовании отдельного процесса заказа, который не может быть проверен таким же образом, но имеет те же требования к валидации, прежде чем он будет добавлен в базу данных. .

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

Есть ли способ заполнить и проверить веб-форму полностью на стороне сервера?

Ответы [ 3 ]

1 голос
/ 02 апреля 2010

Определенно возможно создать экземпляр страницы .aspx и вызывать его на лету, хотя это может быть сопряжено с трудностями в зависимости от того, что вы делаете. Вот основная идея:

Page instance = BuildManager.CreateInstanceFromVirtualPath(
                            "/myPath/myPage.aspx", 
                            typeof(MyPageCodeBehindType)) as Page; 

Предположительно, теперь вы можете позвонить на него instance.ProcessRequest(HttpContext.Current) и пройти через жизненный цикл страницы. Снова предположительно вы можете проверить instance.IsValid и посмотреть, сработали ли ваши валидаторы.

Я говорю, вероятно, потому что у меня очень мало опыта с этим. Дайте ему шанс - возможно, проверьте BuildManager класс для некоторых других примеров.

РЕДАКТИРОВАТЬ : Похоже, вы можете сделать это:

UserControl instance = (UserControl)BuildManager.CreateInstanceFromVirtualPath(
                            "~/Controls/Somefile.ascx", typeof(UserControl));
1 голос
/ 02 апреля 2010

Да, вы смотрели в LoadControl?

Dim dp As missico_UserControls_DropDownListDeviceProfile = LoadControl("~/missico/UserControls/DropDownListDeviceProfile.ascx")
'Dim dp As missico_UserControls_ComboDeviceProfile = LoadControl("~/missico/UserControls/ComboDeviceProfile.ascx")

Dim DeviceID As Integer
Dim MarketID As Integer = 0

DeviceID = dr("DeviceID").ToString

dp.SelectedValue = ProfileID
dp.DeviceID = DeviceID

dp.ID = "d" & DeviceID & "m" & MarketID

dp.OnClientChange = "pc(this);"

dp.ShowLabel(CBool(gscID = 1))

LoadControl должен работать на вас. Тем не менее, если пользовательский элемент управления не предназначен для настоящей автономной работы, вы можете создать страницу, которая обернет пользовательский элемент управления. Сделайте перенос сервера на страницу. Попросите страницу заполнить пользовательский элемент управления, проверить ее, обработать вывод, а затем перенести на страницу подтверждения / ошибки / оригинала.

Я использовал оба эти метода, но сейчас не могу найти код передачи сервера.

0 голосов
/ 02 апреля 2010

Не уверен. Может быть возможно создать экземпляр класса вашего пользовательского элемента управления, заполнить его поля, установив поля .Text для каждого из его элементов управления, вызвать .Validate () и проверить его значение isValid ().

Если это не сработает, возможно, вам лучше разработать отдельную проверку для «отдельного процесса заказа», если это возможно. Можете ли вы дать более подробную информацию о том, как это реализовано?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...