首先使用数据库生成下拉列表

时间:2013-07-15 06:50:52

标签: asp.net asp.net-mvc database asp.net-mvc-3 asp.net-mvc-4

在我的mvc3应用程序中,我想填充来自数据库的数据的下拉列表,这里使用的是使用entityframework和数据库第一种方法,所以请帮我这样做

3 个答案:

答案 0 :(得分:1)

到目前为止,您没有提供任何代码,因此我对您一直在使用的数据一无所知。我将发布一些代码,您将要做的就是修改它以适应您的场景。

让我们使用简单的贷款申请解决方案。客户需要申请贷款,他需要提供银行详细信息。他必须从下拉列表中选择一家银行。

让我们从名为Bank的域模型开始。这表示来自数据库表的数据。让我们调用表Banks

public class Bank
{
     public int Id { get; set; }

     public string Name { get; set; }
}

您的Banks表格如下所示:

Id | int | not null | primary key
Name | varchar(50) | not null

取决于你需要做什么我通常有一个服务层调用我的银行存储库来带回数据。但是看到你只需要带回数据而我们就可以跳过服务层了。

public class BankRepository : RepositoryBase<Bank>, IBankRepository
{
     public IEnumerable<Bank> FindAll()
     {
          return DatabaseContext.Banks;
     }
}

您的数据库上下文将如下所示:

public class DatabaseContext : DbContext
{
     public DbSet<Bank> Banks { get; set; }
}

这就是您的数据检索方法的样子。它可能不是完整的解决方案,但在线有很多样本。只需去Google吧。

让我们进入网络应用程序。

您的视图/页面将使用视图模型,而不是您的域模型。您可以使用视图模型在视图/页面上表示数据。因此,在您的创建视图中,您将传递一个创建应用程序视图模型,其中包含您的银行列表。 IBankRepository的实例将通过称为依赖注入的技术提供。我为此使用了Autofac

public class ApplicationViewModel
{
     public int BankId { get; set; }

     public IEnumerable<Bank> Banks { get; set; }
}

您的控制器的操作方法将填充视图模型并将其发送到您的视图。

public class ApplicationController : Controller
{
     private readonly IBankRepository bankRepository;

     public ApplicationController(IBankRepository bankRepository)
     {
          this.bankRepository = bankRepository;
     }

     public ActionResult Create()
     {
          ApplicationViewModel viewModel = new ApplicationViewModel
          {
               Banks = bankRepository.FindAll()
          };

          return View(viewModel);
     }
}

然后,您的视图将收到此视图模型,并根据需要执行此操作。在这种情况下,它会填充您的银行下拉列表。

@model YourProject.ViewModels.Applications.ApplicationViewModel

@using (Html.BeginForm())
{
     <tr>
          <td class="edit-label">Bank: <span class="required">**</span></td>
          <td>
               @Html.DropDownListFor(
                    x => x.BankId,
                    new SelectList(Model.Banks, "Id", "Name", Model.BankId),
                    "-- Select --"
               )
               @Html.ValidationMessageFor(x => x.BankId)
          </td>
     </tr>
}

我不是你的经历,但从你的问题来看,你似乎还需要做大量的研究。网上有很多例子。您需要处理Entity Framework code firstASP.NET MVC的示例。投入一些时间,你将在以后收获回报。

我希望这有效,祝你好运。解决方案可能不是您想要的,但它可以帮助您指导正确的方向。

答案 1 :(得分:0)

假设你有一个类似的课程

public class ProductBrand
    {
        //Eg. Nokia, Hp, Dell
        /// <summary>
        /// Second Level to Category
        /// Has Foreign Key to category table
        /// </summary>
        [Key]    
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int ProductBrandId { get; set; }

        [Display(Name = "Category")]
        public int ProductCategoryId { get; set; }
        public virtual ProductCategory ProductCategory { get; set; }

        [Required(ErrorMessage = "This field is required")]
        [StringLength(300, ErrorMessage = "This field must not be greater than 300 xters long")]
        [Display(Name="Name")]
        public string BrandName { get; set; }

        public IList<Product> Products { get; set; }

        [Display(Name = "Status")]
        public bool ActiveStatus { get; set; }


    }

这意味着此模型具有外键名称ProductCategoryId,然后在您的创建产品品牌视图中,您将需要一个包含所有产品类别的下拉列表供您选择。

只需创建一个像这样的动作结果

  public ActionResult CreateProductBrand() {

            ViewBag.ProductCategoryId = new SelectList(context.ProductCategories, "ProductCategoryId", "CategoryName");
            return View();
        }

然后在你的相应视图中调用viewbag:

  @using (Html.BeginForm()) {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)


            <table style="width:400px" class="post-form">
                <tr>
                    <td>Category</td>
                    <td>
                        <div class="editor-field">

                            @Html.DropDownList("ProductCategoryId", String.Empty)
                            @Html.ValidationMessageFor(model => model.ProductCategoryId)
                        </div>
                    </td>
                </tr>
            </table>
         <table style="width:400px" class="post-form">
                <tr>
                    <td>Brand</td>
                    <td>
                        <div class="editor-field">
                            @Html.EditorFor(model => model.BrandName)
                            @Html.ValidationMessageFor(model => model.BrandName)
                        </div>
                    </td>
                </tr>
                <tr>
                    <td>Status</td>
                    <td>

                        <div class="editor-field">
                            @Html.EditorFor(model => model.ActiveStatus)
                            @Html.ValidationMessageFor(model => model.ActiveStatus)
                        </div>
                    </td>
                </tr>
                <tr>
                    <td></td>
                    <td>
                        <input type="submit" class="button blue" value="Save" />
                        <a href="@Url.Action("ProductBrand", "ProductSetup")" class="button">Cancel
                        </a>
                    </td>
                </tr>
            </table>


    }

答案 2 :(得分:0)

视图模型:

    public List<Item> _Items { get; set; }
    public int_newID { get; set; }

模型项

    public int_id { get; set; }
    public string _name { get; set; }

控制器: 使用数据填充_Items并将该列表发送到您的视图

查看:

    @Html.DropDownListFor(c => c._newID, new SelectList(Model._Items , "_id", "_name"),--Select Item--")