我想知道是否有人可以帮助我理解为什么下面的POST操作(SelectDomain)总是传递一个空值。应该使用下拉菜单将Post方法传递给枚举类型(演示,客户端,开发),但目前情况并非如此。
在我的控制器中,我有以下几行:
public enum DomainCategories { Demo, Client, Dev };
public ActionResult SelectDomain()
{
SetViewBagDomainType(DomainCategories.Client);
return View();
}
private void SetViewBagDomainType(DomainCategories domainCategories)
{
IEnumerable<DomainCategories> values = Enum.GetValues(typeof(DomainCategories)).Cast<DomainCategories>();
IEnumerable<SelectListItem> items =
from value in values
select new SelectListItem
{
Text = value.ToString(),
Value = value.ToString(),
Selected = value == domainCategories,
};
ViewBag.WebsiteType = items;
}
[HttpPost]
public ActionResult SelectDomain(DomainCategories domainType)
{
ViewBag.messageString = domainType.ToString() +
" val = " + (int)domainType;
myWebsite.subdomain = domainType.ToString();
createWebsite();
return View(myWebsite);
}
在视图中我有以下内容:
@model Installer.Models.Website
@{
ViewBag.Title = "SelectCategory";
}
<h2>Select Category</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<fieldset>
Subdomain:
@Html.DropDownList("WebsiteType")
<p>
<input type="submit" value="Submit" />
</p>
</fieldset>
}
完整的例外是: [ArgumentException:参数字典包含非可空类型'Installer.Controllers.WebsitesController + DomainCategories'的参数'domainType'的空条目,用于'Installer.Controllers中的方法'System.Web.Mvc.ActionResult SelectDomain(DomainCategories)'。 WebsitesController”。可选参数必须是引用类型,可空类型,或者声明为可选参数。
任何帮助表示赞赏。
答案 0 :(得分:0)
@Html.DropDownList("WebsiteType")
呈现以下html
<select id="WebsiteType" name="WebsiteType">
<option value="Demo">Demo</option>
<option selected="selected" value="Client">Client</option>
<option value="Dev">Dev</option>
</select>
public ActionResult SelectDomain(DomainCategories domainType)
期待一个名为domainType
的参数,但浏览器正在发送WebsiteType
。
您可以通过更改参数名称
来解决此问题 public ActionResult Index(DomainCategories websiteType)
或更新您的控制器以将ViewBag名称设置为domainType,并更新视图以匹配此。