Манипулирующая форма. Действие - PullRequest
2 голосов
/ 23 сентября 2011

Мне нужно использовать Form.Action для перенаправления в скрипт, который будет собирать значения со своей страницы. Стоит отметить, что этот скрипт является внешним.

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

Могу ли я в любом случае:

В обработчике событий нажатия кнопок можно установить Form.Action, а затем вызвать что-то вроде Form.Submit?

OR

Заранее настройте Form.Action, а затем каким-то образом отправьте кнопку назад до начала действия.

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

Ответы [ 5 ]

3 голосов
/ 01 октября 2011

Если странице не нужно выполнять проверку / обработку на стороне сервера, когда пользователь нажимает кнопку, вы можете сделать это следующим образом:

В ASPX:

<asp:Button ID="btnSubmit" runat="server"
   OnClientClick="$('form').get(0).setAttribute('action', 'ScriptActionUrl'); $('form').submit();"
   Text="Submit">
</asp:Button>

Если на стороне сервера есть что-то, что нужно обработать / проверить, сделайте это, например,

В ASPX:

<asp:Button ID="btnSubmit" runat="server" OnClick="btnSubmit_Click" Text="Submit">
</asp:Button>

В коде страницы позади:

protected void btnSubmit_Click(object sender, EventArgs e)
{
    Page.Validate(); //Do Validation or some other processing
    if(Page.IsValid)
    {
         Page.ClientScript.RegisterStartupScript(this.GetType(), Guid.NewGuid().ToString(), "$('form').get(0).setAttribute('action', 'ScriptActionUrl'); $('form').submit();", true);
    }
}
1 голос
/ 27 сентября 2011

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

Обычно вы собираете данные POST с помощью компоновщика, а затем отправляете их.Вот пример:

// Create a new WebClient instance to send the data with
WebClient myWebClient = new WebClient();

// Collection to hold our field data
NameValueCollection postValues = new NameValueCollection();

// Add necessary parameter/value pairs to the name/value container.
postValues.Add("LoginName", tbLoginName.Text);
postValues.Add("Password", tbPassword.Text);

// Send off the message
byte[] responseArray = myWebClient.UploadValues("http://website.com", postValues);

// Decode and display the response.
tbResponse.Text = Encoding.ASCII.GetString(responseArray);

Этот код просто макет, но он должен указывать вам правильное направление, если вы хотите идти по этому пути.

0 голосов
/ 27 сентября 2011

Поскольку страницу необходимо отправить на страницу, которая не находится под вашим контролем, я бы порекомендовал создать веб-службу, привязанную к нажатию кнопки. Используя код, подобный следующему, вы можете создавать события javascript, которые происходят перед отправкой страницы:

btnSubmit.Attributes.Add("onclick", "javascript:functionName()")

Замените functionName на имя функции, в которой вы выполняете вызов веб-службы. Это дает дополнительную возможность отменить отправку формы на основе результатов веб-службы, выполнив:

return false;
0 голосов
/ 27 сентября 2011

Это вполне возможно, установив свойство PostBackUrl для любого элемента управления кнопки (например, кнопки asp.net или кнопки ссылки).Для подтверждения концепции сделайте следующее:

  1. Создайте проект веб-службы asmx;Добавьте один веб-метод под названием SayHello.Он примет один аргумент - Имя пользователя и вернет Hello <Username> вызывающему клиенту.
  2. Запустите этот веб-сервис.Предположим, что его URL-адрес выглядит примерно так: http://localhost:6107/DemoAsmx/demo.asmx
  3. Откройте другой экземпляр VS.Создайте нормальный веб-проект.Добавьте страницу aspx.Добавьте одно текстовое поле.Установите для его идентификатора значение Username
  4. Добавить кнопку на страницу.Установите для свойства PostbackUrl значение http://localhost:6107/DemoAsmx/demo.asmx/SayHello
  5. Запустите веб-проект.Теперь введите имя в текстовое поле и нажмите кнопку.Вы увидите ответ xml от веб-службы asmx.

Это также можно сделать с помощью javascript.Надеюсь, это поможет.

0 голосов
/ 23 сентября 2011

Вы можете сделать то, что вам нужно сделать в коде, а затем вызвать Server.Transfer (строка url, bool preserveFormVariables);чтобы переместить запрос на другую страницу для обработки.

Затем можно использовать Request.Form на другой странице, чтобы получить нужные значения.

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