我在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执行查找以及使用相同的方法填充此内容等等)但是有任何内在的方法来执行此操作吗?我不见了?
答案 0 :(得分:2)
没有内在的方法可以做到这一点,JavaScript是你最好的选择。
为SELECT添加一个“onchange”事件处理程序,它将隐藏输入的值设置为所选OPTION的显示值。
答案 1 :(得分: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];
}
答案 2 :(得分:0)
我通常使用模型中Collection类中的静态属性处理MVC中的Drop Downs / Select Boxes。
示例:
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" }
};
}
}
然后我会在视图中渲染DropDown,如:
<%= 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"]]
如果您愿意,甚至可以将视图渲染到视图中。
希望有所帮助。