无法在mvc 4中的局部视图中填充下拉控件

时间:2014-08-21 10:28:45

标签: asp.net-mvc-4

我想填写局部视图的下拉控件。

这是我的模特:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

    namespace HelpDeskSystem.Models
    {
        public class CategoryModel
        {
            public string CategoryId { get; set; }
            public string CategoryName { get; set; }
            public int frequency { get; set; }

         //   public virtual ICollection<SubcategoryModel> subCategory { get; set; }
        }
    }

这是我的控制器

 public ActionResult categories()
        {
          List<CategoryModel> categoriesList = new List<CategoryModel>();
          return View(categoriesList);
         }

假设我的 categorylist 对象中有记录。

这是我的主要查看页面

@model IEnumerable<HelpDeskSystem.Models.CategoryModel>
@using HelpDeskSystem.Models

@using GridMvc.Html

@{
    ViewBag.Title = "categories";
    Layout = "~/Views/Admin/AdminMaster.cshtml";
}
<link href="~/css/admincss.css" rel="stylesheet" />
<div class="categoryheader">Manage Categories</div>


    <div class="table-responsive" style="width: 98%; margin-left: auto; margin-right: auto">

        <table class="table">
            <thead>
                <tr style="background-color: #d6e6ed;">
                    <td align="center" style="border-top: 1px solid #d7d7d7; border-bottom: 1px solid #d7d7d7; width: 20px; font-weight: bold; font-size: 12px;">C#</td>
                    <td style="border-top: 1px solid #d7d7d7; border-bottom: 1px solid #d7d7d7; font-weight: bold; font-size: 12px;">Name</td>
                    <td style="border-top: 1px solid #d7d7d7; border-bottom: 1px solid #d7d7d7; font-weight: bold; font-size: 12px;">Tickets</td>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td align="center" colspan="15" style="border: 1px solid #d7d7d7; font-family: Arial, font-size:12px; font-weight: bold;">
                        <br>
                        <br>
                        No records found...<br>
                        <br>
                        <br>
                    </td>
                </tr>
            </tbody>
        </table>
    </div>



 @Html.Partial("Createcategories",new CategoryModel())

这是我的部分观点:

@model HelpDeskSystem.Models.CategoryModel


@using (Html.BeginForm())
{
    @Html.ValidationSummary(true)
    <!-- container -->


        <div class="container">
            <div class="row">

                <!-- Article main content -->
                <article class="col-xs-12 maincontent">
                    <div class="col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
                        <div class="panel panel-default">
                            <div class="panel-body">
                                <p class="text-center text-muted">
                                    Add New Category

                                </p>
                                <hr>
                                <span style="color: red;">@ViewBag.message</span>


                                 <div class="top-margin">
                                    <label>Parent Category <span class="text-danger">*</span></label>
                                  @*  @Html.TextBox("categoryName", null, new { @class = "form-control", id = "txtcategoryID" })*@
                                     @Html.DropDownListFor(Model => Model.CategoryId,null, "Select Category", new { id = "ddlCategory"})
                                </div>

                                <div class="top-margin">
                                    <label>Category Name <span class="text-danger">*</span></label>
                                    @Html.TextBox("categoryName", null, new { @class = "form-control", id = "txtcategoryID" })
                                </div>




                                <hr>

                                <div class="row">
                                    <div class="col-lg-5 text-right">
                                        <button class="btn btn-action" name="btnCategory" type="submit">Create Category</button>
                                    </div>
                                </div>
                            </div>
                        </div>

                    </div>

                </article>
            </div>
        </div>

}

但它在这一行上引发了我的错误:

  @Html.DropDownListFor(Model => Model.CategoryId,null, "Select Category", new { id = "ddlCategory"})

没有类型&#39; IEnumerable&#39;的ViewData项目。具有键&#39; CategoryId&#39;。

任何人都可以告诉我如何填写部分视图中的下拉列表

因为我是mvc初学者

1 个答案:

答案 0 :(得分:0)

在主视图中,您的模型是@model IEnumerable,但是当您调用partial时,您将传递一个新的CategoryModel,根据定义,它将为空。要使数据直接传递到部分,请将部分调用更改为

@Html.Partial("Createcategories", model)

然后您需要将部分模型更改为

@model IEnumerable<HelpDeskSystem.Models.CategoryModel>

然后你的下拉就是

@Html.DropDownList("Selected", Model)

因为您只是传递了没有变量的列表来将所选值绑定到使用DropDownListFor

通常,您不会仅将列表传递到主视图并将其直接传递给部分视图。如果您有更多数据,可以将列表添加到viewModel

 public class ViewModel
    {
        //other fields used on your main page
        public List<SelectListItem> CategoryList { get; set; }
    }

然后您需要更改控制器以填充视图模型并将其传递给视图并将主页模型更改为viewmodel。然后你可以改变你的部分电话

    @Html.Partial("Createcategories", model.CategoryList)

希望这会有所帮助