C# ASP .NET Web API 在 HTML 表单中创建枚举下拉列表

29 浏览
0 Comments

C# ASP .NET Web API 在 HTML 表单中创建枚举下拉列表

我在这个问题上遇到了很多问题。希望有人能帮忙。在回答之前,请记住我已经搜索过了,并且已经找到了很多关于这个问题的主题。

目前,我正在尝试使用典型的POST请求填充一个HTML表单(这是我第一次这样做,我通常是一个很好的程序员,但是由于ASP.NET Web API中的奇怪习惯,这个网络服务的东西让我烦恼。)我的下拉列表应该包含以下枚举作为可选择的值:

public enum FuelTypes
{
    Gasoline = 0,
    Diesel = 1
};

是的,我确保在调用控制器中的View时传入了我的模型实例。

这行代码在“调试”模式下一直中断,就在这里的HTML代码中(您可以看到我已经注释掉了它以便更清楚地显示):

@Html.DropDownListFor(model => model.FuelId, Model.FuelTypesList, "--Fuel Type--")

所以这次肯定还有其他问题。请看一下我在C#和HTML中的相关代码:

附注:如果有其他改进的提示会很好!我对此还不太熟悉。但是我需要能够填充和显示下拉列表的值。然后我必须从包含所有被POST的数据的HttpWrapper对象创建相关对象。

提前感谢!

我的模型:

public class FuelModel
{
    public FuelModel()
    {
        FuelTypesList = new List();
    }
    [Display(Name = "FuelType")]
    public int FuelId
    {
        get; set;
    }
    public IEnumerable FuelTypesList
    {
        get; set;
    }
}

我的控制器:

public class ActionController : Controller
{
    // POST: Action
    [HttpPost]
    [ActionName("FuelType")]
    public ActionResult Index(FuelModel Model)
    {
        Model = new FuelModel();
        // 这是引用“FuelType”枚举以后从HTML表单中访问值的地方。
        IEnumerable FuelType = 
        Enum.GetValues(typeof(FuelTypes)).Cast();
        Model.FuelTypesList = 
        from action in FuelType
        select new SelectListItem
        {
            Text = action.ToString(),
            Value = ((int)action).ToString()
        };
        return View(Model);
    }
}

我的视图(包含HTML / JavaScript):

    

    创建新的汽车广告

    @model AutoWebService.Models.FuelModel @{ ViewBag.Title = "Index"; } @Html.LabelFor(model => model.FuelId) @Html.DropDownListFor(model => model.FuelId, Model.FuelTypesList) @Html.DropDownListFor(model => model.FuelId, Model.FuelTypesList, "--Fuel Type--")
    @section scripts{ }

    0
    0 Comments

    问题出现的原因是需要在HTML表单中创建一个枚举下拉列表,但是没有找到相应的解决方法。解决方法是使用C# ASP .NET Web API中的代码来创建枚举下拉列表,具体的代码如下:

    Html.DropDownListFor(o => o.EnumProperty, Enum.GetValues(typeof(enumtype)).Cast().Select(x => new SelectListItem { Text = x.ToString(), Value = ((int)x).ToString() }))
    

    在这里找到了这个解决方法:https://stackoverflow.com/a/2416623/7349807

    0