可以 无刷新 保存文本字段吗?

dming4 2008-09-16 11:04:40
我的页面都是 ajax读取数据的.

现在有一个问题就是
我这个页面上有一个文本字段,公用信息.
旁边有个按钮 点击保存 它要执行保存动作,但我的页面不能用服务器按钮,不然会刷新页面,破坏原来的一切状态...


应该怎么解决呢
...全文
145 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dming4 2008-09-17
  • 打赏
  • 举报
回复
回调可以解决该问题的....

将那个文本作为参数传递


我一开始没有考虑到将它作为参数...以为是文本太长了...

现在可以了...tks
namhyuk 2008-09-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 dming4 的回复:]
我没用ajax组件...

你的Q是多少
[/Quote]

那就玩Callback,反正都那么回事,还是那个数据库,我又试了一下。呼~我发现有时热心过头了:-)


public partial class Default3 : System.Web.UI.Page , ICallbackEventHandler
{
private string result = string.Empty;
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.ClientScript.IsClientScriptBlockRegistered(this.GetType(), "scriptKey"))
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "scriptKey", "function MyCallback(content, context) {" + Page.ClientScript.GetCallbackEventReference(this, "content", "OnSuccess", "context") + "}", true);
}

#region ICallbackEventHandler 成员

public string GetCallbackResult()
{
return result;
}

public void RaiseCallbackEvent(string eventArgument)
{
string ret = string.Empty;
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ConnectionString))
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("insert into Table1(content) values(@content)", conn);
cmd.Parameters.Add("content", eventArgument);
conn.Open();
int affectedRows = cmd.ExecuteNonQuery();
ret = affectedRows == 1 ? "保存成功" : "保存失败";
}
result = ret;
}

#endregion
}



<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>无标题页</title>
<script language="javascript" type="text/javascript">
// <!CDATA[

function OnSuccess(result)
{
alert(result);
}

function Button2_onclick() {
MyCallback(document.getElementById('TextArea1').value, null);
}


// ]]>
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService.asmx" />
</Services>
</asp:ScriptManager>
<div>
<textarea id="TextArea1" cols="100" rows="50"></textarea>
<input id="Button2" type="button" value="Callback Test" onclick="return Button2_onclick()" />
</div>
</form>
</body>
</html>
dming4 2008-09-16
  • 打赏
  • 举报
回复
不介意的话我加下你....
dming4 2008-09-16
  • 打赏
  • 举报
回复
我没用ajax组件...

你的Q是多少
namhyuk 2008-09-16
  • 打赏
  • 举报
回复
对了,WebService里
cmd.Parameters.Add("content", content);
应该是
cmd.Parameters.AddWithValue("content", content);

怪的是刚才居然能存进去,呵呵。
Add()方法里并没有这种重载啊,怪了~
namhyuk 2008-09-16
  • 打赏
  • 举报
回复
我刚试了一个。
1、
在App_Code下加一个Database.mdf
里边建个表Table1,两列,一个自增Primary Key,另一个nvarchar(MAX),列名:content
web.config里是这样:

<connectionStrings>
<add name="DatabaseConnectionString1" connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>

2、建个存数据的Web Service

[System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

public WebService () {

//如果使用设计的组件,请取消注释以下行
//InitializeComponent();
}

[WebMethod]
public string SaveTest(string content) {
string ret = string.Empty;
using (System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings["DatabaseConnectionString1"].ConnectionString))
{
System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand("insert into Table1(content) values(@content)", conn);
cmd.Parameters.Add("content", content);
conn.Open();
int affectedRows = cmd.ExecuteNonQuery();
ret = affectedRows == 1 ? "保存成功" : "保存失败";
}
return ret;

}

}



.aspx

<head runat="server">
<title>无标题页</title>
<script language="javascript" type="text/javascript">
// <!CDATA[

function Button1_onclick() {
var content = $get('TextArea1').value;
WebService.SaveTest(content, OnSuccess);
}
function OnSuccess(result)
{
alert(result);
}

// ]]>
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Services>
<asp:ServiceReference Path="~/WebService.asmx" />
</Services>
</asp:ScriptManager>
<div>
<textarea id="TextArea1" cols="100" rows="50"></textarea><input id="Button1" type="button" value="Save Test" onclick="return Button1_onclick()" />
</div>
</form>
</body>

dming4 2008-09-16
  • 打赏
  • 举报
回复
我是用 xmlhttp那个去读数据的...

用回调我也试了...


public void RaiseCallbackEvent(string eventArgument)
{
//TextBox1y就是文本字段 比如说现在有篇文章内容
string x=this.TextBox1.Text;
//但是这里TextBox1.Text是取不到值的

}
/**/
/// <summary>
/// 该方法是返回回调的结果给客户端
/// </summary>
/// <returns></returns>
public string GetCallbackResult()
{
return Result;
}
  • 打赏
  • 举报
回复
如果楼主是使用asp.net ajax那么相信这个问题不会难倒你.我估计你不是用的asp.net ajax.
那么可以考虑一下使用客户端回调来解决.当然,如果你可以确保用js写出跨浏览器的ajax应用,当然也可以直接用js去写.
namhyuk 2008-09-16
  • 打赏
  • 举报
回复
为什么不行?有多长?
dming4 2008-09-16
  • 打赏
  • 举报
回复
文本不能作为参数吧...
假如文本字段很长的话....是不行的.
namhyuk 2008-09-16
  • 打赏
  • 举报
回复
<input type="button" onclick时把文本字段的内容传到web service或web method, 让它们来处理保存。也可以让它们返回保存结果显示到界面上(保存成功或失败)。

当然,也可以用client callback来玩。

说白了就是在html里扣出东西来,然后用javascript传到服务器端代码,让它们来搞!

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧