2013-02-13 4 views
0

Я реализую веб-приложение с использованием ASP.NET/VB. Передний конец (.aspx) выполняет внешнюю .js файл как:using ClientScriptIncludeRegister для получения значения скрытого поля

<script type =" text/javascript" src="External.js"></script>

, где она содержит некоторые функции. Одна из этих функций, называемых populateHidden() используются для присвоения значения к hiddenField я, определенным на переднем конце (.aspx) следующим образом:

В External.js

document.getElementByID('Hidden2').value = "dsadsadas";

В .aspx

<input id="Hidden2" type ="hidden" runat="server" />

, что я был т участвовав сделать это, чтобы получить значение, присвоенное Hidden2 и передать его на стороне сервера (.aspx.vb) с помощью:

Dim str = Hidden2.value

Однако, поскольку код на стороне сервера выполняет первый, str будет пустым и если postback сделано каким-либо образом, используя Button или Timer, чтобы перезагрузить интерфейс, то str будет иметь dsadsadas. Я не намерен перезагружать страницу или инициализировать postback. Я пробовал window.onload = populateHidden() без везения. Эта ситуация сделала меня отчаянным, так как я пытался сделать многое, убедившись, что не использую postbacks or reloads, пока не наткнулся на ClientScriptManager.RegisterClientScriptInclude Method. Я не мог не разобраться, как я могу использовать такой пример для решения моей ситуации.

  1. Идея в виду, чтобы позвонить или выполнить External.js со стороны сервера (так как он выполняет), затем заполнить Hidden2 на переднем конце, вернитесь на стороне сервера и получить Hidden2.value.

  2. Однако пример в упомянутой выше ссылке серверный код написан в интерфейсе, но я хочу записать его на стороне сервера (.aspx.vb).

  3. Причина, по которой мне нужно Hidden2.value на серверной стороне, заключается в ее хранении в моем sql_database. Любые предложения, советы или решения для получения Hidden2.value с интерфейсом будут действительно оценены.

+0

Вам либо нужно отправить обратно форму, либо отправить данные через ajax. [Реализация клиентских обратных вызовов без обратной транзакции] (http://msdn.microsoft.com/en-us/library/ms178208.aspx) – MikeSmithDev

+0

@MikeSmithDev Ну, что мне потребуется, это полная противоположность, чтобы запустить клиентский код на стороне сервера с помощью нет обратной передачи. – HShbib

+0

Что вам нужно - это AJAX, если вы не хотите отправлять сообщения обратно. Вы не можете запустить клиентский код на сервере ... поскольку вы находитесь на сервере. Вы можете асинхронно отправлять клиентские данные на сервер, не вызывая полную обратную передачу страницы. – MikeSmithDev

ответ

1

В следующем решении используется только ASP.Net Ajax Engine. В событии PageLoad регистрируется вызов функции populateHidden(). В коде было добавлен метод, отмеченный атрибутом WebMethod, позволяющий ему вызываться по запросу Ajax (без обратной передачи). Итак, когда нажимается кнопка, вызывается функция javascript sendHiddenValueToServer(), делая запрос Ajax на метод страницы, передавая значение скрытого поля в качестве параметра.

Во-первых, вы будете нуждаться в ScriptManager объявленную со свойством EnablePageMethods значение ИСТИНА:

<asp:ScriptManager runat="server" EnablePageMethods="true" /> 

я тестировал, используя следующую разметку:

<html> 
<head runat="server"> 
    <title></title> 
    <script src="External.js" type="text/javascript"></script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <asp:ScriptManager runat="server" EnablePageMethods="true" /> 
    <div> 
     <asp:HiddenField ID="Hidden2" runat="server" ClientIDMode="Static" /> 
     <button id="button1" onclick="sendHiddenValueToServer();"> 
     Send Value to Server</button> 
    </div> 
    </form> 
</body> 
</html> 

В файле JavaScript:

function populateHidden() { 
    document.getElementById('Hidden2').value = "dsadsadas"; 
} 

function sendHiddenValueToServer() { 
    PageMethods.ReceiveHiddenValue(
      document.getElementById('Hidden2').value, 
      function() { alert("success!") }, 
      function() { alert("error!") }); 
} 

И в код:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Not Page.IsPostBack Then 
     ScriptManager.RegisterStartupScript(Me, Me.GetType(), "register", "populateHidden();", True) 
    End If 
End Sub 

<System.Web.Services.WebMethod()> 
Public Shared Sub ReceiveHiddenValue(ByVal value As String)   
    Dim str As String = value 
    ' Save Value to database 
End Sub 
+0

Что делать, если я хотел использовать разметку на обычной странице .html вместо страницы .aspx? Будет ли предоставляемое вами решение работать? И если да, как я могу его отредактировать? Рассматривая элементы управления сервером asp.net, их изменение может вызвать проблему? – HShbib

+0

Вы можете использовать обычную страницу '.html', но вам нужно будет использовать jQuery (или другую инфраструктуру JS) для создания Ajax-запросов. – MarcusVinicius

+0

SO, чтобы сделать вещи более ясными, у меня есть обычная страница .html, где у меня есть html , и я вызываю External.js. В свою очередь, External.js должен присвоить значение Hidden2, а затем передать его значение в код для сохранения его в базе данных. Это путь для jQuery? Я не могу сделать это с помощью javascript? Проблема, с которой я столкнулся, - это , поскольку она не работает в обычном html. Было бы очень полезно, если бы вы могли дать мне несколько ключевых слов для поиска и исследований. – HShbib