查看
<input type="hidden" name="selectedValue" value="0" />
<select name="itemType" id="itemType" style="width:80%;">
<option value="Item1">Item 1</option>
<option value="Item2">Item 2</option>
<option value="Item3">Item 3</option>
<option value="Item4">Item 4</option>
<option value="Item5">Item 5</option>
</select>
视图模型
public ItemTypes itemType { get; set; }
ItemTypes.cs中的枚举列表(扩展方法)
public enum ItemTypes
{
Item1,
Item2,
Item3,
Item4,
Item5
}
public static string GetItemDesc(this ItemTypes itemtype)
{
switch (itemtype)
{
case ItemTypes.Item1:
return "Item 1 Description";
case ItemTypes.Item2:
return "Item 2 Description";
case ItemTypes.Item3:
return "Item 3 Description";
default:
return "Item 4 and 5 Description";
}
}
以上是我的代码。我想在整个页面中保留选定的Enum值。我有四个,索引(下拉菜单所在的位置),您选择付款方式的页面,验证页面(您验证所有信息的位置)和收据页面(表明您的交易有已成功。)我需要枚举值在每个页面保持不变。请帮忙。
答案 0 :(得分:1)
在我看来,您需要做的是将选择内容保存在某处,以便其他页面可以访问该选择。 MVC是无状态的,因此值需要在每次调用中传递,或者需要保存在其他页面可以访问它的位置。您可以采用多种方法来保存和检索浏览器控件的选择。
请记住,默认情况下枚举将序列化为整数,因此在处理客户端的值时,它将是一个整数。这意味着在您的视图中,您可能需要使用<option value="0">Item 1</option>
使用0,1,2,3和4作为客户端值 - 或者使用MVC HTML帮助程序或Razor标记,具体取决于您的MVC版本,使用枚举名称为您生成这些选项。
以下是一些可能符合您需求的保存/检索选项:
当您提交每个页面时,将选择值作为发布内容的属性(您的itemType
),然后在加载下一页时,将值包含在查询字符串中,或作为一部分下一个获取请求的路由(GetPaymentMethodPage,GetVerifyPage,GetReceiptPage)。
将选择值保存在Cookie中,并在JavaScript中从该Cookie中检索(如果Cookie不存在,已删除或用户不允许Cookie,则需要提供默认值)。
将选择值保存在浏览器存储中 - 有各种类型,包括Web存储(SessionStorage或LocalStorage)。
答案 1 :(得分:0)
您有几个不同的选择,但请记住,MVC是无状态的。这意味着MVC不了解页面请求中存储在枚举中的任何信息。因此,您需要将参数传递给以字符串形式接收枚举的操作方法,然后将字符串解析回枚举类型。如何执行此操作的示例是here。
或复制+粘贴的代码:
using System;
[Flags] enum Colors { None=0, Red = 1, Green = 2, Blue = 4 };
public class Example
{
public static void Main()
{
string[] colorStrings = { "0", "2", "8", "blue", "Blue", "Yellow", "Red, Green" };
foreach (string colorString in colorStrings)
{
try {
Colors colorValue = (Colors) Enum.Parse(typeof(Colors), colorString);
if (Enum.IsDefined(typeof(Colors), colorValue) | colorValue.ToString().Contains(","))
Console.WriteLine("Converted '{0}' to {1}.", colorString, colorValue.ToString());
else
Console.WriteLine("{0} is not an underlying value of the Colors enumeration.", colorString);
}
catch (ArgumentException) {
Console.WriteLine("'{0}' is not a member of the Colors enumeration.", colorString);
}
}
}
}
还有一个事实是,您想要枚举的任何页面都需要从生成视图的操作方法传递枚举。然后在视图中,您必须接受并将枚举存储在隐藏字段中。