将提示框值从 javascript 函数 - 回发到 c#

本文关键字:函数 javascript 提示 | 更新日期: 2023-09-27 18:36:39

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

首先让我说,我对C#和 ASP.NET 非常陌生,对javascript的经验很少。

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

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

这是我在 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? 
                 }

将提示框值从 javascript 函数 - 回发到 c#

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

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

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

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

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

如果您尝试使用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)
    {
    }

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

使用 javascript 从回发复制

我认为您需要这里的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 Pages。

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

如何使用 __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"];
}