2012-06-07 8 views
5

Ich werde versuchen, das Beste zu tun, um zu artikulieren, was ich versuche zu tun.Prompt Box Wert von Javascript-Funktion übergeben - PostBack zu C#

Lassen Sie mich vorweg sagen, dass ich sehr neu in C# und ASP.NET bin und minimale Erfahrung mit Javascript habe.

Ich habe eine JavaScript-Funktion, die eine Eingabeaufforderung aufruft. Das Gesamtbild ist - wenn Eingabe eingegeben wird - wird es in einer Spalte in der Datenbank gespeichert.

Ich zeichne eine leere auf den Wert von der Eingabeaufforderungsbox zum PostBack in C# übergeben.

function newName() 
{ 
    var nName = prompt("New Name", " "); 
    if (nName != null) 
    { 
     if (nName == " ") 
     { 
      alert("You have to specify the new name."); 
      return false; 
     } 
     else 
     { 
      // i think i need to getElementByID here??? 
      //document.forms[0].submit(); 
     } 
    } 
} 

Dies ist, was ich in C#:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!IsPostBack) 
    { 
     //I have other code that works here 
    } 
    else 
    { 
     //I'm totally lost here 
    } 
} 

Ich versuche, herauszufinden, wie man diesen Anruf für die Eingabe von der JavaScript-Funktion zu machen.

Ich habe die letzten paar Stunden online und in Büchern verbracht. Überfordert gewesen.

EDIT

ich ein wenig tweeking tat zu passen, was ich versuche, wie zu tun ....

<asp:HiddenField ID="txtAction" runat="server" Value="" /> 

document.forms(0).txtAction.Value = "saveevent"; 
document.forms(0).submit(); 

versuchen, herauszufinden, jetzt die Zeichenfolge in der Tabelle einzufügen ... ..

string nEvent = Request.Form["event"]; 
    if (txtAction.Value == "saveevent") { 
        nName.Insert(); //am i on the right track? 
       } 
+0

form.sembmit sollte es tun –

Antwort

2

Nun, hier ist eine mögliche Art und Weise (nicht getestet, aber sollte man die Grundidee geben). Sie könnten ein verstecktes Feld auf dem Formular platzieren Sie den Wert der Eingabeaufforderung zu halten:

<input type="hidden" id="hiddenNameField" runat="server" value=""> 

Dann fordert den Benutzer für den Wert, stellen Sie sie auf verstecktes Feld, und dann Formular abschicken:

document.getElementById('hiddenNameField').value = nName; 
document.forms(0).submit(); 

Dann in Ihrem Code-Behind können Sie einfach auf hiddenNameField.Value zugreifen.

0

Wenn Sie versuchen, die Methode auf der Rückseite mithilfe des Java-Skripts aufzurufen, können Sie versuchen, den Webmethodenansatz zu verwenden.

zum Beispiel haben Sie eine Funktion, die die SendForm Methode

 function SendForm() { 
     var name = $("#label").text(); 
     PageMethods.SendForm(name, 
      OnSucceeded, OnFailed); 
    } 
    function OnSucceeded() { 
    } 
    function OnFailed(error) { 
    } 

und die Methode haben aufrufen, die von Javascript aufgerufen wird. hier

[WebMethod(enableSession: true)] 
    public static void SendForm(string name) 
    { 

    } 

0

Kopierte Ich glaube, Sie AJAX-Request müssen. Ich empfehle die Verwendung von jQuery, da die Hunde für Sie arbeiten ... Ansonsten müssen Sie eine Menge bereits geschriebenen allgemeinen Code für die AJAX-Verarbeitung implementieren.

Etwas wie die folgenden:

function PromptSomewhere(/* some args if needed*/) 
{ 
    var nName = prompt("New Name", " "); 
    // Do process your prompt here... as your code in JS above. Not placed here to be more readable. 
    // nName is used below in the AJAX request as a data field to be passed. 

    $.ajax({ 
     type: "post", // may be get, put, delete also 
     url: 'place-the-url-to-the-page', 
     data { 
      name: nName 
      // You may put also other data 
     }, 
     dataType: "json", 
     error: PromptFailed, 
     success: OnPromptComplete 
    }); 
} 

function PromptFailed(xhr, txtStatus, thrownErr) // The arguments may be skipped, if you don't need them 
{ 
    // Request error handling and reporting here (404, 500, etc.), for example: 
    alert('Some error text...'); // or 
    alery(txtStatus); // etc. 
} 

function OnPromptComplete(res) 
{ 
    if(!res) 
     return; 

    if(res.code < 0) 
    { 
     // display some validation errors 
     return false; 
    } 

    // display success dialog, message, or whatever you want 

    $("div.status").html(result.message); 
} 

Dies ermöglicht es Sie, dynamisch Daten an den Server mit asynchroner Anforderung zu senden. Nun C#:

using System.Web.Script.Serialization; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(IsPostBack && ScriptManager.GetCurrent(this).IsInAsyncPostBack) 
    { 
     string nName = Request.Form["name"]; 

     // do validation and storage of accepted value 
     // prepare your result object with values 



     result.code = some code for status on the other side 
     result.message = 'Some descriptive message to be shown on the page'; 

     // return json result 
     JavaScriptSerializer serializer = new JavaScriptSerializer(); 

     Response.Write(serializer.Serialize(result)); 
    } 
} 

Hinweise: Wenn Sie ASP.NET verwenden MVC 2 oder höher glaube ich, können Sie JsonResult Aktionen verwenden und Request.IsAjaxRequest (glaube, ich war der Name), und viele andere Einrichtungen und Verbesserungen von ASP.NET - ASP.NET MVC ist der neue Ansatz zum Erstellen von Webanwendungen basierend auf MVC-Pattern (Architektur) und wird irgendwann ASP.NET-Seiten ersetzen.

0

Dies ist eine sehr gute Ressource und enthält die Antwort auf Ihre Frage:

How to use __doPostBack()

Grundsätzlich PostbackWithParameter() Funktion von Ihren anderen JS-Funktion aufrufen:

<script type="text/javascript"> 
function PostbackWithParameter(parameter) 
{ 
    __doPostBack(null, parameter) 
} 
</script> 

Und in Ihrem Code -behind, nehmen Sie den Wert für diesen Parameter wie folgt:

public void Page_Load(object sender, EventArgs e) 
{ 
    string parameter = Request["__EVENTARGUMENT"]; 
} 
Verwandte Themen