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

解决方案 »

  1.   

    <input type="button" onclick时把文本字段的内容传到web service或web method, 让它们来处理保存。也可以让它们返回保存结果显示到界面上(保存成功或失败)。当然,也可以用client callback来玩。说白了就是在html里扣出东西来,然后用javascript传到服务器端代码,让它们来搞!。
      

  2.   

    如果楼主是使用asp.net ajax那么相信这个问题不会难倒你.我估计你不是用的asp.net ajax.
    那么可以考虑一下使用客户端回调来解决.当然,如果你可以确保用js写出跨浏览器的ajax应用,当然也可以直接用js去写.
      

  3.   

    我是用  xmlhttp那个去读数据的...用回调我也试了...
        public void RaiseCallbackEvent(string eventArgument)
        {
            //TextBox1y就是文本字段  比如说现在有篇文章内容
            string x=this.TextBox1.Text;
            //但是这里TextBox1.Text是取不到值的       }
        /**/
        /// <summary>
        /// 该方法是返回回调的结果给客户端
        /// </summary>
        /// <returns></returns>
        public string GetCallbackResult()
        {
            return Result;
        }
      

  4.   

    我刚试了一个。
    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>
      

  5.   

    对了,WebService里
    cmd.Parameters.Add("content", content);
    应该是
    cmd.Parameters.AddWithValue("content", content);怪的是刚才居然能存进去,呵呵。
    Add()方法里并没有这种重载啊,怪了~
      

  6.   

    我没用ajax组件...你的Q是多少
      

  7.   


    那就玩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>
      

  8.   

    回调可以解决该问题的....将那个文本作为参数传递
    我一开始没有考虑到将它作为参数...以为是文本太长了...现在可以了...tks