【问题标题】:mvc 4 dropdownlist with categories带有类别的 mvc 4 下拉列表
【发布时间】:2013-04-03 11:55:51
【问题描述】:

如何在我的视图中插入带有类别的dropdownlist

我有模特

public class IdeaModel
{
    [Required]
    [Display(Name = "Idea tilte")]
    [StringLength(250, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    public string IdeaTilte { get; set; }

    [Required]
    [Display(Name = "CategoryName")]
    public string CategoryName { get; set; }

    [Required]
    [Display(Name = "CategoryID")]
    public int CategoryID { get; set; }

    [Display(Name = "Main content")]
    [DataType(DataType.MultilineText)]
    [StringLength(1000, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 30)]
    public string Content { get; set; }
}

我的观点(我想要一个下拉列表,而不是 TextBoxFor CategoryName 和 CategoryID)

@model TakesCare.Models.IdeaModel



<section id="">
@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    @ViewBag.Status


    <fieldset>
        <legend>Add an idea</legend>
        <ol>
            <li>
                @Html.LabelFor(m => m.IdeaTilte)
                @Html.TextBoxFor(m => m.IdeaTilte)
            </li>
            //one dropdownlist, instead of TextBoxFor CategoryName and CategoryID
            <li>
                @Html.LabelFor(m => m.CategoryName)
                @Html.TextBoxFor(m => m.CategoryName)
            </li>
            <li>
                @Html.LabelFor(m => m.CategoryID)
                @Html.TextBoxFor(m => m.CategoryID)
            </li>*@
            <li>
                @Html.LabelFor(m => m.Content)
                @Html.EditorFor(m => m.Content)
            </li>
        </ol>
        <input type="submit" value="AddIdea" />
    </fieldset>
}
</section>

我有类别:

“Cat1”,id=1

“Cat2”,id=2

“Cat3”,id=3

我的第一个问题是 - 我应该将这些数据存储在哪里? (类别名称和 ID)
在我的IdeaModel?

第二个问题是 - 如何在 dropdownlist 我的所有类别中显示 - 那么,如何从这个 dropdownlist 获取 HttpPost 中的 ID 值?什么是最简单的解决方案?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    您还可以在数据库中有一个表来存储您的下拉列表访问该表 (OR)

    在您的模型中将模型属性定义为类别,如下所示:

    public IEnumerable<SelectListItem> Categories
            {
                get
                {
                    return new[]
                    {
                        new SelectListItem { Value = "1", Text = "Cat1"},
                        new SelectListItem { Value = "2", Text = "Cat2" },
                        new SelectListItem { Value = "3", Text = "Cat3" }
                    };
                }
            }
    

    现在在您看来,您应该使用Html.DropdownlistFor 访问

    @Html.DropDownListFor(m=>m.CategoryID ,Model.Categories)
    

    当您发布数据时,您将在模型的 CategoryId 属性中收到您的 id

    【讨论】:

    • 此处出现错误 NullReferenceException @Html.DropDownListFor(m=&gt; m.CategoryID, Model.Categories
    • 类别是否定义为视图模型上的公共属性?
    【解决方案2】:

    我建议您在 ViewBag 中创建一个 SelectList,您可以调用它来填充您的下拉列表...它将显示您的类别名称并返回您的类别 ID。

    在控制器中:

    var categories = db.IdeaModel.OrderBy(CategoryName);
    SelectList categoryList = new SelectList(categories, "CategoryId", "CategoryName");
    viewBag.categoryList = categoryList;
    

    在视图中:

    @Html.DropDownListFor(m=>m.CategoryId, @ViewBag.categoryList)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多