2017-11-09 11 views
0

プログラミングに慣れていません。私はASP.NET WebformsプロジェクトをASP.NET MVCに移行しようとしています。私はASP.NET MVCのリストボックスから選択したインデックスの値を取得し、このインデックスをテキストボックス内の文字列をソートするために使用する必要があります。ASP.NET MVC - リストボックスで選択されたインデックスの値を取得する

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="True" 
    Height="166px" Width="198px" 
    BackColor="Black" Font-Bold="True" ForeColor="White" Font-Size="Small" 
    OnSelectedIndexChanged="ListBox1_SelectedIndexChanged"> 
</asp:ListBox> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:TextBox ID="TextBox1" runat="server" 
      Height="149px" Width="286px" 
      TextMode="MultiLine" OnTextChanged="TextBox1_TextChanged" 
      AutoPostBack="True" Font-Bold="True" ForeColor="#006600"> 
     </asp:TextBox> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="ListBox1" 
      EventName="SelectedIndexChanged" />        
    </Triggers> 
</asp:UpdatePanel> 

そして、背後にあるコードはでした:それは私のWebフォームプロジェクトで非常に簡単だった

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    ... 
    i = ListBox1.SelectedIndex; 
    TextBox1.Text += ....// here is a string sorted based on the selected index i); 
     ...           
} 

しかし、私は、二にもかかわらず、ASP.NET MVCで選択したインデックスを受信するための方法を発見していませんITフォーラムでの1日の検索

私は、このようにビューでリストボックスをポピュレート:

@Html.ListBoxFor(x => x.SelectedIndexes, new SelectList(Model.Entries, 
"Value", "Text"), new { id = "ListBox1", onchange = 
"selectedIndexChanged()", style = "width:198px; height:166px; color:white; 
background:black; font-weight:bold" }) 

エントリのリストがモデルに作成され、ビューにコントローラを介して送られました。それは動作し、リストボックスに値が設定されます。しかし、ASP.NET MVCでは、ListBox1.SelectedIndexのようなものはないようです。クライアント側(JavaScriptのステートメント:document.getElementById("ListBox1").selectedIndex)で値を受け取ることは可能ですか?この値をサーバー側に転送する方法はないようです。

選択したインデックスの値を抽出してモデルに転送する方法を知っている人はいますか?

ありがとうございます。

+0

あなたが送信するために、AJAXを使用する必要があります同じページにとどまる場合は、サーバーへの値を入力します。オプションを選択したときにやりたいことは何ですか? –

+0

はい、まさにこれは私のやりたいことです(私のwebformsプロジェクトのように - 上記のコードを見て、少なくとも私はそれがajaxであると言われました)。選択されたインデックスの助けを借りて、ASP.NET MVCでajaxがどのように使用されているか、項目を選択するとイベントがトリガーされるようになりました(今はテスト目的でサブミットボタンを使用します)。もちろん、どんな助力も大いに評価されます。 – Mira

+0

オプションを選択したときに、あなたが望むものがまだ説明されていません!あなたのURL、{id:選択されている}関数(データ){データと一緒にやってみましょう($ {'SelectedIndexes'})あなたは返す});}); ' –

答えて

0

ListBoxFor()はパラメータとしてIEnumerable<SelectListItem>を受け入れますので、ここでSelectListを使用する必要はありません。場合によってはlinqを使用して項目を生成することができます。new SelectList(Model.Entries, "Value", "Text")Model.Entries.Select((e, i) => new SelectListItem { Text = e.Text, Value = i.ToString() })

+0

あなたの答えにも感謝します:-)。 – Mira

0

MVCコントローラでは、HTMLのname属性を使用してHTMLビューの値をModelに自動的にバインドします。 だから、あなたは(それがサーバー自体によって理解させるために、プロパティ名=「ListBox1を」を使用)のようなあなたの受信パラメータモデルにして、カミソリの構文で同じ名前を使用する必要があります。

@Html.ListBoxFor(x => x.SelectedIndexes, new SelectList(Model.Entries, 
    "Value", "Text"), new{ id ="ListBox1",name="ListBox1", 
    onchange="selectedIndexChanged()", 
    style = "your css" }) 
+0

あなたは疑問だった!それが私が理解していることです。コントローラーで選択した値を受け取るか、または変更ドロップダウンでDOMを使用して再生するかどうかを具体的に伝えますか? –

+0

私は、使用されるモデルで選択されたインデックスの番号を受け取りたいと思います。 – Mira

+0

だから私の提案した方法でそれを達成することができます –

関連する問題