将提示框值从 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?
}
好吧,这是一种可能的方法(未经测试,但应该给你基本的想法)。您可以在表单上放置一个隐藏字段来保存提示的值:
<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"];
}