2009-08-25 107 views
0

我在其中有一個下拉列表中選擇類似於下面的ASP.NET MVC項目的一種形式:如何使用ASP.NET MVC獲取選定選項的文本?

<select> 
    <option value="ee5711b9-ec86-4378-a975-ae10a4ebedbc">Volvo Account</option> 
    <option value="0dc0e9d8-2245-43de-81a9-5b94c19646fa">Saab Account</option> 
    <option value="f9a05ef6-9ca6-4eeb-9e04-79726a62b38c">Mercedes Account</option> 
    <option value="1c5c2e43-06d6-4b7d-916a-231be535a608">Audi Account</option> 
</select> 

在這個項目,我需要做的GUID標識的東西以後的頁面,但首先我需要提示用戶進行確認。顯然,GUID對他們來說毫無用處,他們希望看到更友好的名字(即「沃爾沃賬戶」)。

但是,當我鑽入FormCollection值時,我所能得到的只是值,而不是選定的選項的文本。這對設計目標是有意義的,但我怎樣才能通過文本值POST呢?

我可以想到一些解決方法(使用JavaScript設置一個隱藏字段,在使用GUID和我填充這個的相同方法之後進行查找之後進行查找),但是有沒有內置方法可以做到這一點?錯過了?

回答

2

沒有內在的方式來做到這一點,JavaScript真的是你最好的選擇。

將「onchange」事件處理程序添加到您的SELECT中,將隱藏輸入的值設置爲所選OPTION的顯示值。

+0

如果價值沒有改變怎麼辦?我不同意它,但是客戶想要它的方式,列表中的第一個值是有效的(如果他們不想改變它,他們可以點擊右鍵) – 2009-08-25 20:49:21

+1

您可以設置隱藏的輸入非常容易地匹配您視圖中SELECT輸入的值,並讓JavaScript連接句柄發生更改。您可以運行一個頁面就緒腳本,並在頁面加載後將隱藏的輸入設置爲選定的值。 – JMP 2009-08-25 20:51:28

0

使用隱藏字段:

<select> 
    <option value="ee5711b9-ec86-4378-a975-ae10a4ebedbc">Volvo Account</option> 
    <option value="0dc0e9d8-2245-43de-81a9-5b94c19646fa">Saab Account</option> 
    <option value="f9a05ef6-9ca6-4eeb-9e04-79726a62b38c">Mercedes Account</option> 
    <option value="1c5c2e43-06d6-4b7d-916a-231be535a608">Audi Account</option> 
</select> 
... 
<input type="hidden" name="Options[0].Key" value="ee5711b9-ec86-4378-a975-ae10a4ebedbc" /> 
<input type="hidden" name="Options[0].Value" value="Volvo Account" /> 
<input type="hidden" name="Options[1].Key" value="0dc0e9d8-2245-43de-81a9-5b94c19646fa" /> 
<input type="hidden" name="Options[1].Value" value="Saab Account" /> 
... 

控制器:

public ActionResult SomeAction(..., IDictionary<string, string> options) 
{ 
    string selectedValue = ...; 
    string selectedText = options[selectedValue]; 
} 
0

我通常處理下拉菜單/選擇框在MVC與模型的集合類中的靜態屬性。

例子:

using System.Collections.Generic; 

namespace SomeProject.Models 
{ 
    public class Collections 
    { 
     public static Dictionary<string, string> AccountType = new Dictionary<string, string> 
     { 
      { "", "" }, 
      { "ee5711b9-ec86-4378-a975-ae10a4ebedbc", "Volvo Account" }, 
      { "0dc0e9d8-2245-43de-81a9-5b94c19646fa", "Saab Account" }, 
      { "f9a05ef6-9ca6-4eeb-9e04-79726a62b38c", "Mercedes Account" }, 
      { "1c5c2e43-06d6-4b7d-916a-231be535a608", "Audi Account" } 
     }; 
    } 
} 

然後我會渲染視圖類似的下拉:

<%= Html.DropDownList("AccountType", new SelectList(SomeProject.Models.Collections.AccountType, "Key", "Value", Convert.ToString(ViewData["AccountType"])), "", new { tabindex = "3", @class = "dropdown" }) %> 

現在收藏是提供給您的整個應用程序。你可以抓住你想要的任何用戶友好的名稱通過:

SomeProject.Models.Collections.AccountType[ViewData["AccountType"]] 

你甚至可以使採集出來查看,如果你的願望。

希望有所幫助。

相關問題