5

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

让我先说我对 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? 
                 }
4

5 回答 5

2

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

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

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

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

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

于 2012-06-07T17:37:22.633 回答
0

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

如何使用 __doPostBack()

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

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

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

public void Page_Load(object sender, EventArgs e)
{
    string parameter = Request["__EVENTARGUMENT"];
}
于 2012-06-07T18:14:39.750 回答
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)
    {

    }

于 2012-06-07T17:40:40.213 回答
0
<script language='Javascript'> 
__doPostBack('__Page', ''); 
</script> 

使用 javascript 从 Postback复制

于 2012-06-07T17:41:41.060 回答
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 页面。

于 2012-06-07T18:02:45.917 回答