【问题标题】:Passing prompt box value from javascript function- PostBack to c#将提示框值从 javascript 函数 - PostBack 传递到 c#
【发布时间】:2012-06-11 19:11:54
【问题描述】:

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

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

【问题讨论】:

    标签: c# javascript asp.net


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:
        <script language='Javascript'> 
        __doPostBack('__Page', ''); 
        </script> 
        

        复制自Postback using javascript

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

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

            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"];
            }
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2019-11-24
              • 2015-09-19
              • 1970-01-01
              • 1970-01-01
              • 2019-08-07
              • 2016-10-10
              • 2014-01-17
              • 1970-01-01
              相关资源
              最近更新 更多