Вы можете использовать подход, описанный ниже, чтобы запустить метод code-behind, нажав кнопку во второй форме на стороне клиента.
- Убедитесь, что на вашей странице сразу после включения
asp:ScriptManager
первый тег формы (это очень важно, иначе этот подход не будет работать) - Включите приведенный ниже код JavaScript на своей странице.В этом сценарии вызывается метод
__doPostBack
, который является стандартной функцией JavaScript, используемой средой asp.net для отправки сообщений о событиях управления, таких как нажатие кнопки.Эта функция будет доступна только в том случае, если вы включите на своей странице asp: ScriptManager. - Измените разметку кнопки в форме на стороне клиента, чтобы она имела атрибут onclick, установленный
- В вашем коде-после события Page_Load проверьте параметры
__EVENTTARGET
и __EVENTARGUMENT
и вызовите метод requestSong_Click
, передав ноль для обоих его параметров (примечание: вы не должны использовать отправителя или e при нажатии кнопки, иначе это не будет работать)
JavaScript-код для включения в страницу
<script type="text/javascript">
function postBack(btn) {
//get data you want to pass to code-behind
var artist = document.getElementById("artist").value;
var song = document.getElementById("song").value;
var arguments = "saveToDb" + "|" + artist + "|" + song;
__doPostBack('requestSongButton', arguments);
//you can pass more arguments using a comma-delimited or pipe-delimited list of values
//to the second parameter in above method
}
</script>
Требуется разметка для кнопки в форме на стороне клиента
<button class="button" onclick="" id="requestSongButton" name="Submit"
onclick="doPostBack(this); return false;">Submit</button>
C # code-behind для обработки отправки с помощью кнопки на стороне клиента
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
if (Request["__EVENTTARGET"] == "requestSongButton" &&
Request["__EVENTARGUMENT"].IndexOf("saveToDb") = 0)
{
//code that executes on click of requestSongButton in second form
requestSong_Click(null, null);
}
}
}
C # код для получения опубликованных значений для обратной передачи кнопки на стороне клиента
protected void requestSong_Click(object sender, EventArgs e) {
string artist;
string song;
//you must always pass null for e and sender if posting from client-side form button
if (sender == null && e == null) {
var arguments = Request["__EVENTARGUMENT"];
if (arguments != null && arguments != String.Empty) {
//split the | delimited string to an array
Dim argumentsArray as String() = arguments.Split(New Char() {
"|"
c
});
//now get values of artist textbox and song textbox
//note that artist index is 1 and soung index is 2
//due to the sequence in which we populated arguments
//in client-side JavaScript doPostBack function
artist = argumentsArray[1];
song = argumwentsArray[2];
}
} else {
artist = Request.Form["artist"].ToUpper();
song = Request.Form["song"].ToUpper();
}
string song_Request = artist + " - " + song;
SqlConnection con2 = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
con2.Open();
SqlCommand cmd2 = new SqlCommand("insert into SONGS values (@REQUESTED_SONGS)", con2);
cmd2.Parameters.AddWithValue("REQUESTED_SONGS", song_Request);
cmd2.ExecuteNonQuery();
//more of your code follows