我对.net或sql都不擅长。
问题是我有一个Web表单和一个数据库。该表单将允许用户在文本框和下拉列表中输入信息。 下拉列表中的数据保存在表格中。
所以,我正在从表中读取值,当用户填写表单并从下拉列表中选择他们想要的选项时,文本框中的数据和选定的下拉列表应该被发回以保存在数据库中。
我已成功读取数据库中的值,并在下拉列表中显示它们,如下面的代码所示:
public class state
{
public string stateID { get; set; }
public string stateName { get; set; }
}
[WebMethod]
public static List<state> PopulateDropDownList()
{
DataTable dt = new DataTable();
List<state> objDept = new List<state>();
SqlConnection con = new SqlConnection("Data Source = ****; Initial Catalog = LCF2016; Integrated Security = true");
{
using (SqlCommand cmd = new SqlCommand("SELECT STATE_ID, STATE_Name FROM state", con))
{
con.Open();
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
if (dt.Rows.Count > 0)
{
for (int i = 0; i < dt.Rows.Count; i++)
{
objDept.Add(new state
{
stateID = dt.Rows[i]["STATE_ID"].ToString(),
stateName = dt.Rows[i]["STATE_Name"].ToString()
});
}
}
return objDept;
}
}
}
<script src="
http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
//url is the path of our web method (Page name/functionname)
url: "Default.aspx/PopulateDropDownList",
data: "{}",
dataType: "json",
//called on jquery ajax call success
success: function (result) {
$('#ddlstate').empty();
$('#ddlstate').append("<option value='0'>-Select-</option>");
$.each(result.d, function (key, value) {
$("#ddlstate").append($("<option></option>").val(value.stateID).html(value.stateName));
});
},
//called on jquery ajax call failure
error: function ajaxError(result) {
alert(result.status + ' : ' + result.statusText);
}
});
});
</script>
<p>State</p>
<asp:DropDownList ID="ddlstate" runat="server" Width="160px" />
但是,即使我成功调用要显示在下拉列表中的数据,我也无法将所选数据与文本框中的数据一起插回到数据库中。换句话说,数据不会保存到数据库中。
以下是我在“点击提交时”插入数据的代码:
public partial class Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack == true)
{
Label1.Text = ("**Thanks for entering your information");
}
}
protected void Button1_Click(object sender, EventArgs e)
{
using (SqlConnection vid = new SqlConnection("Data Source = ****; Initial Catalog = LCF2016; Integrated Security = true"))
{
vid.Open();
using (SqlCommand xp = new SqlCommand("insert into LCF2016 (Fname, Lname, Email, Birthdate, Phone, Address, City, STATE_ID, Zip, Country_ID, Days_Per_Month, Primary_Language, Secondary_Language, Occupation_ID, HearAbout_ID, Other_Skills) Values(@Fname, @Lname, @Email, @Birthdate, @Phone, @Address, @City, @STATE_ID, @Zip, @Country_ID, @Days_Per_Month, @Primary_Language, @Secondary_Language, @Occupation_ID, @HearAbout_ID @Other_Skills)", vid))
{
xp.Parameters.AddWithValue("@Fname", TextBox1.Text);
xp.Parameters.AddWithValue("@Lname", TextBox2.Text);
xp.Parameters.AddWithValue("@Email", TextBox3.Text);
xp.Parameters.AddWithValue("@Birthdate", TextBox4.Text);
xp.Parameters.AddWithValue("@Phone", TextBox5.Text);
xp.Parameters.AddWithValue("@Address", TextBox6.Text);
xp.Parameters.AddWithValue("@City", TextBox7.Text);
xp.Parameters.AddWithValue("@STATE_ID", ddlstate.SelectedValue);
xp.Parameters.AddWithValue("@Zip", TextBox8.Text);
xp.Parameters.AddWithValue("@country_ID", ddlcountry.SelectedValue);
xp.Parameters.AddWithValue("@Days_Per_Month", TextBox10.Text);
xp.Parameters.AddWithValue("@Primary_Language", ddllangp.SelectedValue);
xp.Parameters.AddWithValue("@Secondary_Language", ddllangs.SelectedValue);
xp.Parameters.AddWithValue("@Occupation_ID", ddloccup.SelectedValue);
xp.Parameters.AddWithValue("@HearAbout_ID", ddlhearabout.SelectedValue);
xp.Parameters.AddWithValue("@Other_Skills", TextBox15.Text);
xp.ExecuteNonQuery();
}
}
我得到的错误是
无效的回发或回调参数。使用配置或&lt;%@ Page EnableEventValidation =“true”%&gt;启用事件验证在一个页面中。出于安全考虑,此功能可验证回发或回调事件的参数是否来自最初呈现它们的服务器控件。如果数据有效且符合预期,请使用ClientScriptManager.RegisterForEventValidation方法注册回发或回调数据以进行验证。
答案 0 :(得分:0)
从来没有尝试过你在这里做的事情,我最好的近似是当你使用PostBack时ViewState无效,因为你正在使用Ajax来填充下拉列表。您似乎正在使用Ajax调用填充下拉列表,然后尝试使用整页帖子将该数据发送回服务器。您有几件事情在这里我不太明白,但我会建议就是这个。
我认为您需要在服务器端发送请求/发布,即在请求中绑定下拉列表和文本框控件服务器端,然后使用正常的回发将数据发送回服务器。或者,使用AJAX两种方式 - 接收和发送您的数据,但不要试图混合它们。
答案 1 :(得分:0)
尝试, 通过jquery
$( "#ddlstate" ).change(function() {
$('[id*=Hiddenfield1]').attr('value', $( "#ddlstate" ).val());
});
体
<asp:HiddenField ID="Hiddenfield1" runat="server">
码
xp.Parameters.AddWithValue("@STATE_ID", Hiddenfield1.vlue);