【问题标题】:IsPostBack in ASPXASPX 中的 IsPostBack
【发布时间】:2013-01-05 09:57:31
【问题描述】:

我有这个 ASPX 代码:

<form name="AddArticle" action="Register.aspx" method="post">
<b>
title :<br /></b><input id="Text1" type="text" name="ArticleTitle"/><p></p>
<b>

date: <br /></b><input id="Text2" type="text" name="ArticleDate"/><p></p>

<b>
author : <br /></b><input id="Text3" type="text" name="ArticleAuthor"/><p></p>
<b>
text: <br /></b> <textarea rows="10" cols="60"  name="ArticleBody"></textarea>
<br />
<input id="Reset1" type="reset" value="clean" />
<input id="Submit1" type="submit" value="send" /></form>

我有这个 ASPX.C# 代码:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.OleDb;

public partial class Register : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
        string ArticleTitle = "", ArticleBody = "", ArticleAuthor = "", ArticleDate = "";
        if (IsPostBack)
        {
            try
            {
                ArticleTitle = Request.Form["ArticleTitle"].ToString();
                ArticleDate = Request.Form["ArticleDate"].ToString();
                ArticleAuthor = Request.Form["ArticleAuthor"].ToString();
                ArticleBody = Request.Form["ArticleBody"].ToString();


                string dpath = Server.MapPath(@"App_Data") + "/MySite.mdb";
                string connectionstring = @"Data source='" + dpath + "';Provider='Microsoft.Jet.OLEDB.4.0';";
                OleDbConnection con = new OleDbConnection(connectionstring);
                string QuaryString = string.Format("insert into tblArticles(ArticleTitle,ArticleBody, ArticleAuthor, PostDate) values ('{0}','{1}','{2}','{3}')", ArticleTitle, ArticleBody, ArticleAuthor, ArticleDate);
                OleDbCommand cmd = new OleDbCommand(QuaryString, con);
                con.Open();
                cmd.ExecuteNonQuery();

            }
            catch
            {
                Response.Redirect("Default.aspx");
            }
        }
    }
    }

我的问题是为什么当我单击“发送”按钮时,表单中的信息(标题、作者...)没有插入到数据库中?我该如何解决? 希望得到帮助,谢谢。

【问题讨论】:

  • 认真的吗?至少阅读参数化查询...
  • 旁注:insert into tblArticles(ArticleTitle, PostDate) values ('{0}','{1}','{2}','{3}') - 当您指定 2 列“(ArticleTitle, PostDate)”但想要插入 4 个值 ('{0}','{1}','{2}','{3}') 时应该抛出异常
  • 你写的,部分文字没有复制成功,我现在修复一下。谢谢

标签: c# asp.net database forms webforms


【解决方案1】:

最好的方法是使用按钮单击事件,但在您的情况下。您可以为每个元素使用 AutoPostBack 属性:

<asp:TextBox ID="ArticalTitle" runat="server" Text="Button"  AutoPostBack="true"/>

当用户改变对这个元素的焦点时(按 TAB 等),代码将回发文本框中的值。但在这种情况下,您的值会一一传递,因此您需要在尝试将它们写入数据库之前存储这些值,或者您可以使用面板控件并在面板控件之外放置一个虚拟按钮以更改焦点:

<asp:Panel ID="Panel1" runat="server" AutoPostBack="true">
    <asp:TextBox ID="TextBox1" Text="asd" runat="server" />
    <asp:TextBox ID="TextBox2" Text="asd" runat="server" />
</asp:Panel>
<asp:Button ID="Button1" runat="server" Text="Button" />

当用户单击按钮面板控件自动回发时,您可以捕获文本框中的值。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我认为您应该编写一个按钮单击事件来调用该函数:

    .cs

      protected void Button1_Click(object sender, EventArgs e)
        {
            ArticleTitle = Request.Form["ArticleTitle"].ToString();
                ArticleDate = Request.Form["ArticleDate"].ToString();
                ArticleAuthor = Request.Form["ArticleAuthor"].ToString();
                ArticleBody = Request.Form["ArticleBody"].ToString();
    
    
                string dpath = Server.MapPath(@"App_Data") + "/MySite.mdb";
                string connectionstring = @"Data source='" + dpath + "';Provider='Microsoft.Jet.OLEDB.4.0';";
                OleDbConnection con = new OleDbConnection(connectionstring);
                string QuaryString = string.Format("insert into tblArticles(ArticleTitle, PostDate) values ('{0}','{1}','{2}','{3}')", ArticleTitle, ArticleBody, ArticleAuthor, ArticleDate);
                OleDbCommand cmd = new OleDbCommand(QuaryString, con);
                con.Open();
                cmd.ExecuteNonQuery();
        }
    

    .aspx:

    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
    

    使用StoredProcedure: web.config中的connectString:

    <add name="CGB_GlobalInfoConnectionString" connectionString="Data Source=127.0.0.1;Initial Catalog=TestDB;Persist Security Info=True;User ID=sa;Password=11111" providerName="System.Data.SqlClient" />
    

    .cs:

    SqlConnection connection = new SqlConnection(DataManager.DBConnectString);
                try
                {
                    SqlCommand cmd = new SqlCommand();
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Connection = connection;
                    cmd.CommandText = "Insert_AddSomething";
                    cmd.Parameters.Add("@UserID", SqlDbType.Int).Value = userid;
    
                    connection.Open();
                    cmd.ExecuteNonQuery();
    
                    }
    

    【讨论】:

    • 谢谢!但是还有另一种方法可以解决这个问题吗? (我是学生,还没学过Evens....
    • @Nave Tseva 我认为您的方法也可以。也许你的插入代码有问题。
    • 感谢您的评论,我的代码有效,但它不会将信息插入数据库。你知道为什么它不起作用吗? @王
    • @Nave Tseva 可能是您的 connectString 或 queryString 错误。你使用 SqlServer 吗?如果你这样做,你可以这样写。我将为您编辑我的代码
    • 是的,但问题是我无法加载没有“IsPostBack”的页面,但是当我使用它时,信息是没有发送到数据库的。有什么解决办法吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-08
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多