我即将启动一个新的ASP.NET MVC应用程序。在其中我们有许多下拉列表/框。我把它们交给ui等没问题。
我的两个问题是: -
答案 0 :(得分:3)
正如jfar发布的那样,请使用:
string selectedValue = "1";
SelectListItem[] selectListItems = Enum.GetNames(typeof(MyEnumeration)).Select(
s => new SelectListItem { Text = s, Value = s, Selected = s == selectedValue}).ToArray();
来自MVCContrib,你不要包含DLL,这只是在MVCContrib中找到的代码。
要防止CSRF(跨站点请求伪造),您可以使用将发布的相应表单下的视图中的<%= Html.AntiForgeryToken() %>
,并使用[ValidateAntiForgeryToken]
修饰相应的操作。有关Html.AntiForgeryToken()
的更多详细信息可以是found here。
根据评论编辑
首先,您需要将SelectListItem[]
放在ViewData中,以便在视图中访问它:
动作
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult MyView(string enumValue)
{
string selectedValue = "1"; // fill this with the value you want to be selected
SelectListItem[] selectListItems = Enum.GetNames(typeof(MyEnumeration)).Select(
s => new SelectListItem { Text = s, Value = s, Selected = s == selectedValue}).ToArray();
ViewData["enumValue"] = selectListItems;
return View();
}
并且在您的视图中,以下表单将起作用。
<form method="post">
<%= Html.AntiForgeryToken() %>
<%= Html.DropDownList("enumValue") %>
</form>
HTML帮助器将输出正确的select
控件。
回到您的控制器中,这是接受表单帖子的操作
[ValidateAntiForgeryToken]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MyView(int enumValue)
{
// enumValue will have the selected value
ViewData["Message"] = "You selected the Enum name" + Enum.GetName(typeof(MyEnumeration), enumValue);
return View();
}
答案 1 :(得分:1)
来自MVCContrib:
SelectListItem[] selectListItems = Enum.GetNames(propertyInfo.PropertyType).Select(
s => new SelectListItem {Text = s, Value = s, Selected = s == value.ToString()}).ToArray();
如果枚举值始终为已知,则可以在路径中使用参数约束: http://www.asp.net/(S(pdfrohu0ajmwt445fanvj2r3))/learn/mvc/tutorial-24-cs.aspx
这样一来,任何人都无法获得或发布给你的行动方法。