2012-06-07 18 views
5

Trataré de hacer lo mejor que pueda para articular lo que estoy tratando de hacer.Al pasar el valor del cuadro de solicitud de la función de javascript-PostBack a C#

Permítanme prólogo diciendo que soy muy nuevo en C# y ASP.NET y que tengo una experiencia mínima con JavaScript.

Tengo una función de javascript que invoca un cuadro de diálogo. La imagen general es - si se ingresa la entrada - se guardará en una columna en la base de datos.

Estoy dibujando un espacio en blanco al pasar el valor desde el cuadro de aviso al PostBack en C#.

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(); 
     } 
    } 
} 

Esto es lo que tengo en C#:

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

Estoy tratando de encontrar la manera de hacer esa llamada para la entrada de la función de JavaScript.

He pasado las últimas horas buscando en línea y en libros. Estado abrumado

EDITAR

lo hice un poco de tweeking para adaptarse a lo que estoy tratando de hacer ....

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

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

tratando de averiguar cómo insertar la cadena en la mesa ahora ... ..

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

form.sumbmit debería hacerlo –

Respuesta

2

Bueno, aquí es una forma posible (no probado, pero debe darle la idea básica). Se podría colocar un campo oculto en el formulario para mantener el valor de la línea de comandos:

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

pedirá al usuario el valor, ponerlo en el campo oculto, y luego enviar su formulario:

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

Luego, en su código subyacente, puede acceder al hiddenNameField.Value.

0

Si está tratando de llamar al método en la parte posterior usando el script java, puede intentar usar el método de método web.

, por ejemplo, que tienen una función que llamará al método SendForm

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

y usted tiene el método que se llamará desde JavaScript.

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

    } 

0

creo que es necesario petición AJAX aquí. Sugiero el uso de jQuery, ya que los perros trabajan para usted ... De lo contrario, tendrá que implementar una gran cantidad de código general ya escrito para el procesamiento de AJAX.

Algo como la siguiente:

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); 
} 

Esto le permitirá enviar datos de forma dinámica al servidor con solicitud asincrónica. Ahora 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)); 
    } 
} 

Notas: Si utiliza ASP.NET MVC 2 o superior pienso, usted será capaz de utilizar las acciones JsonResult y Request.IsAjaxRequest (creo que era el nombre), y muchas otras instalaciones y mejoras de ASP.NET - ASP.NET MVC es el nuevo enfoque para crear aplicaciones web basadas en el patrón MVC (arquitectura) y reemplazará las páginas ASP.NET eventualmente en algún momento.

0

Este es un recurso muy bueno y contiene la respuesta a su pregunta:

How to use __doPostBack()

Básicamente, llame PostbackWithParameter() función de su otra función JS:

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

Y en su código Detrás, tome el valor de ese parámetro como lo siguiente:

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