2012-02-09 73 views
0

我在asp.net應用程序中有一個apsx頁面,其中的元素是根據用戶的輸入使用javascript構建的。當用戶點擊「保存」按鈕時,我需要使用用戶提供的所有數據在服務器上創建一個文件。問題是,這些數據存儲在JavaScript(在生成的div)。我需要以某種方式將這些數據導入到asp.net按鈕單擊函數中,或者將所有數據作爲參數調用該函數。它如何實施?在asp.net應用程序中從javascript獲取數據

+1

你有輸入字段?當你有這些時,你可以把你生成的div所在的區域幷包裝在一個表單中,並在用戶單擊保存時提交該表單。然後您只需讀取插入的內容並重定向到下一頁 – 2012-02-09 08:28:28

+0

,但服務器端無法處理由javascript – Sergey 2012-02-09 09:07:22

回答

2

您可以隨時在表單的隱藏輸入字段中嘗試彈出所需的數據,因此您可以使用Request.Form["fieldName"]來訪問它(請記住爲隱藏的輸入字段提供「名稱」屬性,否則您將花費無用的小時數試圖找出爲什麼你不能通過Request.Form:P)從代碼隱藏中訪問它。這可能是實現這一目標的最簡單的方法...

編輯

只給你一個快速的想法,這裏是從我的項目,我生成隱藏的輸入字段中的一個基於某些動態領域的一些示例代碼回發到服務器一旦Save()功能從某些按鈕/錨叫:

function Save() { 
    $("div.fieldcontainer span.readonly").each(function() { 
     var fieldId = $(this).attr("id"); 
     var fieldValue = $(this).html(); 
     var ctrl = $("<input type=\"text\" id=\"" + fieldId + "\" name=\"" + fieldId + "\" style=\"display:none;\" />"); 
     ctrl.val(fieldValue); 
     $(this).parent().append(ctrl); 
    }); 
    $("div.fieldcontainer a.attachment").each(function() { 
     var fieldId = $(this).attr("id"); 
     var fieldValue = $(this).text() + "|" + $(this).attr("href"); 
     var ctrl = $("<input type=\"text\" id=\"" + fieldId + "_txtHiddenValue\" name=\"" + fieldId + ":txtHiddenValue\" style=\"display:none;\" />"); 
     ctrl.val(fieldValue); 
     $(this).parent().append(ctrl); 
    }); 
    $("div.fieldcontainer select").each(function() { 
     var fieldId = $(this).attr("id"); 
     var fieldValue = $(this)[0].value; 
     var fieldText = $(this).find("option[value='" + fieldValue + "']").text().replace("<", "").replace(">", ""); 
     $(this).attr("id", fieldId + "_ORIGINAL"); 
     var ctrl = $("<input type=\"text\" id=\"" + fieldId + "\" name=\"" + fieldId + "\" style=\"display:none;\" />"); 
     ctrl.val(fieldText + "$" + fieldValue); 
     $(this).parent().append(ctrl); 
    }); 
    $("div.fieldcontainer input[type='checkbox']").each(function() { 
     var fieldId = $(this).attr("id"); 
     var fieldValue = $(this).attr("checked"); 
     $(this).attr("id", fieldId + "_ORIGINAL"); 
     var ctrl = $("<input type=\"text\" id=\"" + fieldId + "\" name=\"" + fieldId + "\" style=\"display:none;\" />"); 
     ctrl.val(fieldValue); 
     $(this).parent().append(ctrl); 
    }); 
    document.form1.submit(); 
} 

您可能是通過每個客戶產生的DIV實現循環同一類型的邏輯,並創建一個隱藏的輸入每個提交fo之前R M。這樣,當用戶忙於與之交互時,不會不必要地使頁面陷入太多額外的標記...

+0

生成的動態輸入,但隱藏的輸入也將由javascript創建,其中的邏輯是什麼?如果你建議我在純html中創建隱藏的輸入 - 這是不可能的。我不知道用戶可以生成多少個輸入 – Sergey 2012-02-09 08:53:32

+0

您可以使用Javascript創建它們......只要它們在

元素內,它們也應該被髮回服務器。不會有任何服務器端控件映射到這些ID /名稱,但是您可以使用Request.Form訪問這些值。 – FarligOpptreden 2012-02-09 11:43:25

1

當您以div顯示數據時,還將數據保存在隱藏字段中。這樣,當您的表單將被髮布時,您將獲得服務器上的數據,並且可以保存它。

編輯

下面是一個例子:

<head runat="server"> 
    <title>my title</title> 
    <script type="text/javascript"> 
     function init() { 
      document.getElementById("output").innerHTML="<input type='hidden' name='name' value='wasim'/>"; 
     } 
    </script> 
</head> 
<body onload="init();"> 
    <form id="form1" runat="server"> 
    <div id="output"> 

    </div> 
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="Button1_Click" /> 
    <br /> 
    <asp:Label ID="lblOutput" runat="server" Text="Label"></asp:Label> 
    </form> 
</body> 
</html> 

和這裏是服務器端代碼:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     lblOutput.Text = Request.Form["name"]; 
    } 
+0

你的意思是還生成JavaScript的輸入?我試過了,但它不起作用 - 服務器代碼無法處理javascript生成的輸入。 – Sergey 2012-02-09 09:05:20

+0

你試過Request.Form [「fieldName」]來獲取值嗎? – wasimbhalli 2012-02-09 09:43:47

+0

是的,我已經創建了隱藏的輸入,使用setAttribute(「key」,「value」)設置了它的類型,值和id,並通過document.getElementById(「myForm」)將它添加到了表單中。appendChild(hiddenInput) – Sergey 2012-02-09 09:54:29

0

使用隱藏變量來存儲用戶輸入 <input type="hidden" name="user_input_id" id="user_input_id" />

在按鈕的點擊功能,使用Request.QueryString["user_input_name"].Valueuser_input_id.Value檢索值

如果這是不明確,發佈您的代碼片段,並會給你一個更好的畫面

+0

我是否明白所有隱藏的字段應該在html中創建並且是靜態的?如果是這樣,那麼這是不可能的,因爲用戶的動態生成輸入的數量是未知的。 – Sergey 2012-02-09 09:04:15

+0

你可以像這樣使用JavaScript動態創建隱藏字段var hiddedField = document.createElement(「input」); hiddenField.type =「隱藏」。這會服務於你的目的? – 2012-02-09 09:08:22

+0

服務器端無法處理動態創建的輸入 – Sergey 2012-02-09 09:13:15

相關問題