从javascript函数 - PostBack传递提示框值到c#

时间:2012-06-07 17:26:03

标签: c# javascript asp.net

我会努力尽我所能来表达我想要做的事情。

让我先说一下我是C#和ASP.NET的新手,并且对javascript的使用经验很少。

我有一个调用提示框的javascript函数。总体情况是 - 如果输入了输入 - 它将被保存到数据库中的一列。

我在将提示框中的值传递给c#中的PostBack时画了一个空白。

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

这就是我在C#中所拥有的:

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

我正在试图弄清楚如何通过javascript函数调用输入。

我花了最近几个小时在网上看书。不知所措。

修改

我做了一个小小的推文,以适应我正在尝试做的事情....

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

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

试图找出如何将字符串插入表中.....

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

5 个答案:

答案 0 :(得分:2)

嗯,这是一种可能的方式(未经测试但应该给你基本的想法)。您可以在表单上放置一个隐藏字段来保存提示的值:

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

然后提示用户输入值,将其设置为隐藏字段,然后提交表单:

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

然后在您的代码隐藏中,您只需访问hiddenNameField.Value

答案 1 :(得分:0)

如果您尝试使用java脚本调用背面的方法,可以尝试使用Web方法方法。

例如,您有一个将调用SendForm方法的函数

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

你有从javascript调用的方法。

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

    }

答案 2 :(得分:0)

<script language='Javascript'> 
__doPostBack('__Page', ''); 
</script> 

Postback using javascript

复制

答案 3 :(得分:0)

我认为你在这里需要AJAX请求。我建议使用jQuery,因为狗会为你工作......否则,你将不得不实现很多已编写的AJAX处理通用代码。

如下所示:

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

这将使您能够使用异步请求将数据动态发送到服务器。现在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));
    }
}

注意:如果您使用ASP.NET MVC 2或更高版本我认为,您将能够使用JsonResult操作和Request.IsAjaxRequest(我认为是名称),以及许多其他设施和改进ASP.NET - ASP.NET MVC是基于MVC模式(体系结构)创建Web应用程序的新方法,最终将在一段时间内取代ASP.NET页面。

答案 4 :(得分:0)

这是一个非常好的资源,包含您问题的答案:

How to use __doPostBack()

基本上,从你的其他JS函数调用PostbackWithParameter()函数:

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

在您的代码隐藏中,抓住该参数的值,如下所示:

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