台灣最大程式設計社群網站
線上人數
9
 
會員總數:245964
討論主題:189547
歡迎您免費加入會員
討論區列表 >> ASP.NET >> DropDownList 在 postback 後總是跳回第一個 item?
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
DropDownList 在 postback 後總是跳回第一個 item?
價值 : 50 QP  點閱數:482 回應數:3
樓主

冷逸雲
初學者
90 61
618 116
發送站內信

各位先進好

小弟有一個edit.aspx
目前碰到的問題是當編輯好資料按下更新的LinkButton之後
頁面上DropDownList總是回到第一個item而不是停留在選取的item上
重點是小弟檢視網頁原始碼發現
DropDownList的selected="selected"是停留在正確的選取item上
怎麼會這樣?
小弟想讓它在postback之後仍停留在被選取的item上


目前是這樣的

edit.aspx



edit.aspx.cs


protected void Page_Load(object sender, EventArgs e)
{
string id = Request.QueryString["id"];
SqlDataSource1.SelectCommand = "SELECT * FROM [Clients_1] where [id] =" + id;
DropDownList group = (DropDownList)FormView1.FindControl("group");
HiddenField groupcode = (HiddenField)FormView1.FindControl("groupcode");

if (!IsPostBack)
{
ListItem item = group.Items.FindByValue(groupcode.Value);
if (item != null)
{
group.Text = groupcode.Value;
}
}
}

protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
{
DropDownList group = (DropDownList)FormView1.FindControl("group");
e.NewValues["groupcode"] = group.SelectedValue;
}

protected void FormView1_ItemUpdated(object sender, FormViewUpdatedEventArgs e)
{
Showmessage.Text = "編輯成功";
}

搜尋相關Tags的文章: [ DropDownList ] , [ postback ] , [ 跳回第一個 item ] , [ SelectedValue ] ,
本篇文章發表於2019-06-05 00:43
1樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
在回覆您的問題前,先討論一個更嚴重的問題

您的這樣的方式會有Sql Injection的問題
等於是您的程式有很嚴重的安全性漏洞,嚴重的話,可以讓駭客把您的主機整個毀掉
標準的做法應該是:
要代入資料時,使用Parameter的方式,而不是組字串的方式

您可以搜尋SQL Injection找到很多很多的訊息
很重要,比您現再提出的問題還重要很多很多,先改這個

本篇文章回覆於2019-06-05 10:21
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
最有價值解答

topcat
捐贈 VP 給 topcat 檢舉此回應
再來說您的問題

在FormView中的
當編輯好資料按下更新的LinkButton之後
頁面上DropDownList總是回到第一個item而不是停留在選取的item上


小喵猜測您試編輯完成後,資料庫更新後,依舊保留FormView的Edit狀態
希望DropDownList可以是資料庫中,那一筆資料的狀態(DorpDownList選擇的項目)

您的DropDownList少了Bind FormView欄位的動作
假設您的FormView是綁定在SqlDataSource1上
DorpDownList要綁定的是SqlDataSource1中,資料裡面的group這個欄位
那麼您的DropDownList應該要將他的SelectedValue與FormView的group綁定

<asp:DropDownList ID="group" Height="28" runat="server" DataSourceID="SqlDataSource2" DataTextField="groupcode" DataValueField="groupcode" SelectedValue='<%# Bind("group") %>'></asp:DropDownList>

^_^
本篇文章回覆於2019-06-05 10:38
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

冷逸雲
檢舉此回應
謝謝TopCat大大的解答
首先關於Sql Injection的問題,小弟知道只是還沒改過去

剛剛試了一下的確可以了
而且後端完全不需要寫任何東西,除了string id = Request.QueryString["id"];
可能太依賴VS了,導致在DropDownList控制項中打上S,沒有列出SelectedValue屬性...然後就一直往後端去想原因
太死腦筋了
本篇文章回覆於2019-06-05 20:16
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.