domainType'非空类型的
本文关键字:类型 domainType | 更新日期: 2023-09-27 18:15:57
我想知道是否有人能帮助我理解为什么下面的POST动作(SelectDomain)总是传递一个空值。Post方法应该通过下拉菜单传递一个enum类型(Demo, Client, Dev}),但目前情况并非如此。
在我的控制器中我有以下行:
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 '的参数'domainType'的空条目。WebsitesController+DomainCategories' for方法'System.Web.Mvc.ActionResult在'Installer.Controllers.WebsitesController'中选择域(DomainCategories)'。可选形参必须是引用类型、可空类型,或者声明为可选形参。
感谢任何帮助。
@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 name为domainType,并更新视图来匹配它