#javascript #asp.net #ajax
#javascript #asp.net #ajax
Вопрос:
Я не очень хорошо говорю по-английски. Сообщение о проблеме. страница . net, код javascript для получения данных из базы данных. Я добавляю их в выпадающий список. Когда я запускаю это, я хочу получить данные из выбранного выпадающего списка при нажатии кнопки. asp.net , но я вижу, что часть выпадающего списка пуста. Что я могу сделать. Ожидание помощи. Спасибо.
коды
aspx.cs—————-
using Ajax;
public partial class Ajax_CSharp : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
Ajax.Utility.RegisterTypeForAjax(typeof(Ajax_CSharp));
}
[Ajax.AjaxMethod(HttpSessionStateRequirement.ReadWrite)]
public string GetDataCity()
{
try
{
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["conn"]);
SqlCommand cmd = new SqlCommand("SELECT * FROM Sehir", con);
cmd.Connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataSet ds = new DataSet("DataSet");
adapter.Fill(ds, "Table");
if ((ds.Tables[0].Rows.Count <= 0))
{
return "Empty";
}
else
{
string cityID = "";
string cityName = "";
for (int i = 0; i <= ds.Tables[0].Rows.Count - 1; i )
{
cityID = ds.Tables[0].Rows[i]["SehirID"].ToString() ",";
cityName = ds.Tables[0].Rows[i]["SehirAdi"].ToString() ",";
}
cityID = cityID.Substring(0, cityID.Length - 1);
cityName = cityName.Substring(0, cityName.Length - 1);
return cityID "~" cityName;
}
}
catch
{
return "Error";
}
}
protected void Button1_Click(object sender, EventArgs e)
{
string c;
c = ddlistCity.SelectedItem.Value; **(error here. DropDownList is null.)**
}
страница aspx ———————-
<script language="javascript" type="text/javascript">
function GetDataCity() {
var response;
Ajax_CSharp.GetDataCity(GetData_CallBackCity);
}
function GetData_CallBackCity(response) {
var response = response.value;
if (response == "Empty") {
alert("no record");
}
else if (response == 'Error') {
alert("database not connection");
}
else {
var arr = response.split("~");
var cityID = arr[0].split(",");
var cityName = arr[1].split(",");
document.getElementById('ddlistCity').length = 0;
var o = document.createElement("option");
o.value = "select";
o.text = "select";
document.getElementById('ddlistCity').add(o);
for (var i = 0; i < cityID.length; i ) {
var o = document.createElement("option");
o.value = cityID[i];
o.text = cityName[i];
document.getElementById('ddlistCity').add(o);
}
}
}
</script>
</head>
<body onload="GetDataCity();">
<form id="form1" runat="server" >
<div>
<asp:DropDownList ID="ddlistCity" runat="server" >
</asp:DropDownList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
ControlToValidate="ddlistCity" ErrorMessage="no select.."
InitialValue="seciniz" SetFocusOnError="True" ValidationGroup="genel">*</asp:RequiredFieldValidator>
<br />
<br />
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" ValidationGroup="genel"/>
</div>
</form>
</body>
Комментарии:
1. Есть ли ddlistCity в UpdatePanel?
Ответ №1:
Измените это:
protected void Button1_Click(object sender, EventArgs e)
{
string c;
c = ddlistCity.SelectedItem.Value; **(error here. DropDownList is null.)**
}
Для:
protected void Button1_Click(object sender, EventArgs e)
{
string c;
if (ddllistCity.SelectedItem != null)
c = ddlistCity.SelectedItem.Value; **(error here. DropDownList is null.)**
}
Чтобы предотвратить ошибку.
Однако ошибка заключается в том, что значения не сохраняются обратно на сервер, когда они создаются на клиенте. Это означает, что вы должны сохранить выбранное значение из выпадающего списка в скрытом поле, чтобы обработать его на сервере. Вам также необходимо привязать выпадающий список при каждой загрузке страницы, потому что опять же сервер не сохраняет элементы, созданные на клиенте.
HTH.
Комментарии:
1. но я хотел бы получить данные. Это невозможно?
2. ДА. Вы должны скопировать выбранный элемент в скрытое поле. Однако вы НИКОГДА не сможете получить доступ к значению с помощью свойства SelectedValue .
3. Причина в том, что вы все делаете на клиенте. Мир работает совсем по-другому, когда вы берете на себя это обязательство. Основной способ, которым большинство элементов управления делают это (ASP.NET AJAX и сторонние) для сохранения данных обратно на сервер необходимо поместить значение в скрытое поле. Используйте скрытое поле на стороне сервера, и это значение отправляется обратно на сервер.
4. Спасибо. скрытое управление полем при правильном его использовании. Смотрю на html-тег, но кажется. Хорошо статическая строка? скрытое поле? это производительность. И купил данные. При обратной передаче страницы выпадающий список сбрасывается. Почему?
5. Выпадающий список @Okan не сохраняет значения, которые вы добавляете с помощью javascript, что вы и делаете. Этого никогда не будет. Вы должны привязываться к веб-службе при каждой загрузке страницы на клиенте. Это просто способ, которым Microsoft разработала элемент управления (элемент управления был разработан до того, как они нажали ASP.NET Фреймворк AJAX). Вы могли бы посмотреть, будет ли элемент управления здесь лучше соответствовать вашим потребностям: asp.net/ajaxLibrary/AjaxControlToolkitSampleSite/Default.aspx
Ответ №2:
Как упоминал Брайан, использование SelectedItem
требует некоторой логики для проверки того, что элемент не равен null. Возможно, вам будет проще просто использовать SelectedValue
вместо этого:
string selectedValue = DropDownList1.SelectedValue;
Комментарии:
1. null, но выпадающий список. Я добавил, что данные не существуют в javasript.
2. Вы хотите получить
SelectedValue
in JavaScript?3. SelectedValue фактически получает событие щелчка. затем выведите значение из другой базы данных.
4. А? Это не имеет никакого смысла.
SelectedValue
это свойство, которое возвращает строку…5. Не принимайте значение выбранного идентификатора выпадающего списка