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)'。可选形参必须是引用类型、可空类型,或者声明为可选形参。

感谢任何帮助。

domainType'非空类型的

@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,并更新视图来匹配它