Asp.Net MVC3 - 如何创建动态 DropDownList

2024-06-26

我发现了很多关于此的文章,但我仍然不知道到底如何做到这一点。我正在尝试创建自己的博客引擎,我有用于创建文章的视图(我首先使用 EF 和代码),现在我必须填写应添加文章的类别数量,但我想将其更改为下拉列表,名称为类别。我的模型看起来是这样的:

public class Article
{
    public int ArticleID { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public int CategoryID { get; set; }
    public DateTime Date { get; set; }
    [Required()]
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string Text { get; set; }
    public virtual Category Category { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
    public virtual ICollection<Comment> Comments { get; set; }
}
public class Category
{
    public int CategoryID { get; set; }
    [Required]
    public string Name { get; set; }
    public virtual ICollection<Article> Articles { get; set; }

}

我知道我必须使用 Enum (或者我认为),但我不太确定如何使用。我不知道我找到的哪个教程最适合我。


Edit:

感谢您的回答,但我发现了其他东西。我正在尝试这个:

这是我的模型:

public class Article
{
    [Key]
    public int ArticleID { get; set; }

    [Display(Name = "Title")]
    [StringLength(30, MinimumLength = 5)]
    [Required]
    public string Title { get; set; }

    public DateTime Date { get; set; }

    public int CategoryID { get; set; }

    [Required()]
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string Text { get; set; }

   public Category Category { get; set; }

    public virtual ICollection<Comment> Comments { get; set; }

    public IEnumerable<Category> Categories { get; set; }
}
public class Category
{
[Key]
    public int CategoryId { get; set; }
    [Required]
public string CategoryName { get; set; }
    public virtual ICollection<Article> Articles { get; set; }

}

这是我创建文章的控制器:

public ActionResult Vytvorit()
{
    IEnumerable<Category> categories = GetCaregories();
    var view = View(new Article() { Categories = categories });
    view.TempData.Add("Action", "Create");

    return view;

}

private static IEnumerable<Category> GetCaregories()
{
    IEnumerable<Category> categories;
    using (BlogDBContext context = new BlogDBContext())
    {
        categories = (from one in context.Categories
                      orderby one.CategoryName
                      select one).ToList();
    }
    return categories;
}

private Category GetCategory(int categoryID)
{
        return db.Categories.Find(categoryID);
}
//
// POST: /Clanky/Vytvorit

[HttpPost]
public ActionResult Vytvorit(Article newArticle)
{

    try
    {
        if (newArticle.CategoryID > 0)
        {
            newArticle.Category = GetCategory(newArticle.CategoryID);
        }
        if (TryValidateModel(newArticle))
        {
                db.Articles.Add(newArticle);
                db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            newArticle.Categories = GetCaregories();
            var view = View(newArticle);
            view.TempData.Add("Action", "Create");
            return view;
        }
    }
    catch
    {
        return View();

    }
}

这是我观点的一部分:

     @Html.DropDownListFor(model => model.CategoryID, new SelectList(Model.Categories,"CategoryID","CategoryName"))
        @Html.ValidationMessageFor(model => model.CategoryID)

我遇到 NullReferenceException 问题,但我不知道为什么。我可以这样做吗?对我来说看起来很容易。


你的模型看起来很奇怪。它包含以下属性CategoryID and Category这看起来多余。它还包含一个SelectListItem集合属性称为Categories。那么,这是模型还是视图模型?看起来相当混乱。我们假设它是一个模型。在这种情况下,它更可能看起来像这样:

public class Article
{
    public int ArticleID { get; set; }

    [Required]
    public string Title { get; set; }

    public DateTime Date { get; set; }

    [Required()]
    [DataType(DataType.MultilineText)]
    [AllowHtml]
    public string Text { get; set; }

    public virtual Category Category { get; set; }

    public IEnumerable<Category> Categories { get; set; }

    public virtual ICollection<Comment> Comments { get; set; }
}

public class Category
{
    public int CategoryID { get; set; }

    [Required]
    public string Name { get; set; }

    public virtual ICollection<Article> Articles { get; set; }

}

现在模型已经很清楚了,我们可以定义一个将传递给视图的视图模型。视图模型是专门为视图设计的类。因此,根据您打算放入此视图中的内容,您可以在此视图模型中定义它。到目前为止,您只讨论了下拉菜单,所以让我们这样做:

public class ArticleViewModel
{
    public int SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
}

然后我们有一个控制器:

public class ArticlesController: Controller
{
    private readonly IArticlesRepository _repository;
    public ArticlesController(IArticlesRepository repository)
    {
        _repository = repository;
    }

    public ActionResult Index()
    {
        Article article = _repository.GetArticle();
        ArticleViewModel viewModel = Mapper.Map<Article, ArticleViewModel>(article);
        return View(viewModel);
    }
}

因此控制器使用存储库来获取模型,将其映射到视图模型(在本例中我使用自动映射器 http://automapper.codeplex.com/)并将视图模型传递给视图,视图将负责显示它:

@model AppName.Models.ArticleViewModel
@using (Html.BeginForm())
{
    @Html.DropDownListFor(
        x => x.SelectedCategoryId, 
        new SelectList(Model.Categories, "Value", "Text"),
        "-- Select category --"
    )
    <input type="submit" value="OK" />
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asp.Net MVC3 - 如何创建动态 DropDownList 的相关文章

  • 具有实体框架的 MVC 控制器的 T4 模板 - 主机的成员属性 (MvcTextTemplateHost)?

    有谁有我可以在 MVC 3 附带的 T4 模板 ControllerWithContext tt 中使用的 Host 对象成员的完整引用吗 我已经尝试了我能想到的所有谷歌搜索 但唯一相关的结果是这个页面 http blogs msdn co
  • 如何在 select2 下拉列表中换行?

    我正在使用 select 2 下拉菜单 然后在其内容中显示一些长句子 我想在句子的正确位置添加换行符 但下拉菜单是自动调整的 For example the content of the dropdown right now looks l
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • ASP.NET MVC ActionFilterAttribute 在模型绑定之前注入值

    我想创建一个自定义操作过滤器属性 该属性在模型绑定期间可访问的 HttpContext 项中添加一个值 我尝试将其添加到 OnActionExecuting 中 但似乎模型绑定是在过滤器之前执行的 你知道我该怎么做吗 也许模型绑定器中有一个
  • MVC BaseController 处理 CRUD 操作

    我想重构我的基本 CRUD 操作 因为它们非常重复 但我不确定最好的方法 我的所有控制器都继承 BaseController 如下所示 public class BaseController
  • 404 - 在控制器 Y 上找不到公共操作方法 X(ActionInvoker.InvokeAction 返回 false)

    这不是一个重复的问题 这个问题让我发疯 我收到典型错误 控制器 Y 上未找到公共操作方法 X 该错误返回404 Not Found 屏幕截图给了你一个好主意 该图像显示调试器在引发异常的行执行之前暂停 base HandleUnknownA
  • 下拉字段 - 第一项应为空

    在查找列中使用共享点构建并将其设置为必填字段 SharePoint 自动选择下拉框中的第一项 对最终用户来说有点误导 有没有办法让这个下拉框的第一行显示空白或空 我对任何解决方案持开放态度 我更喜欢 javascript 类型的解决方案 对
  • 使用 mvc3 将图像保存到文件系统

    我有一些简单的实体 现在需要有一个个人资料图像 执行此操作的正确方法是什么 因此 这是一对一的关系 一张图像仅与一个实体相关 反之亦然 该图像应通过网络表单上传并插入相关实体 因此 当我指出使用文件系统来存储图像并仅将路径图像持久保存到数据
  • 是否可以手动更新 ModelState.IsValid ?

    我想尽可能使用内置的验证功能 我还想对 CRUD 方法使用相同的模型 但是 由于无法使用标准模式完成下拉列表 因此我必须手动验证它 在回发方法中 我只想验证下拉列表并将此结果添加到 ModelState 中 这样我就不必验证使用数据注释完成
  • rails_admin 更改belongs_to 下拉列表以显示不同字段的选项

    我在用rails admin 0 6 5 with Rails 4 1 6并有一个has many belongs toVolume 和 Issue 模型之间的关联设置分别为 class Volume lt ActiveRecord Bas
  • 此时无法启动异步操作调用WebService出现异常?

    在我的 ASP NET MVC 3 项目中 我调用 Web 服务进行登录身份验证 但它抛出一个异常 异常详细信息 此时无法启动异步操作 异步操作只能在异步处理程序或模块内启动 或者在页面生命周期中的某些事件期间启动 如果在执行页面时发生此异
  • 如何创建像 Html.BeginForm 这样的 Html Helper

    我有一个扩展方法 可以根据角色验证用户是否能够看到网页的一部分 如果我简单地删除内容 这会给我带来更多工作 因为所有丢失的表单在保存时都不会正确注册 我必须通过修改所有代码来处理这种行为 所以我想为什么不直接使用display none 属
  • ASP.NET MVC - 服务层,每个控制器操作中的单个或多个服务?

    我开始在我的 MVC 项目中实现一个服务层 以精简一些臃肿的控制器 它也有存储库 工作单元模式 我的问题是 如果您的页面有一个复杂的视图模型 其中包含大量子对象等 并且在幕后有大量逻辑发生 让您了解原始开发人员编写的控制器有近 4000 行
  • ASP.NET MVC 3 中未经身份验证用户的缓存主页

    我的网站有一个主页 我想为匿名用户缓存该页面 并将其设置为经过身份验证的用户的 私有 以便他们将其保存在自己的计算机上 而不是其他地方 因此 如果用户是匿名的 我想将页面保存在服务器缓存中 并使用以下命令保存在浏览器缓存中Cache con
  • Asp.Net MVC3 - 如何创建动态 DropDownList

    我发现了很多关于此的文章 但我仍然不知道到底如何做到这一点 我正在尝试创建自己的博客引擎 我有用于创建文章的视图 我首先使用 EF 和代码 现在我必须填写应添加文章的类别数量 但我想将其更改为下拉列表 名称为类别 我的模型看起来是这样的 p
  • 具有 dropdown-menu-right 类的下拉菜单未向右对齐

    我有以下导航栏结构 current user username 来自我的模板系统 ul class navbar nav mr auto mt 2 mt lg 0 ul div class dropdown show a class dro
  • 国家/地区的下拉菜单

    您好 我想为国家和州实现下拉菜单 州下拉列表应根据所选国家 地区更改其值 有没有任何插件或 gem 可以在 Rails 中执行此操作 尝试卡门插件 http autonomousmachine com posts 2009 4 1 carm
  • 将自定义 ValueProviderFactories 添加到 ASP.NET MVC3?

    我试图尝试将 Protobuf ValueProviderFactory 添加到 MVC3 以便我可以选择 MIME 类型并将原始数据反序列化为操作参数的对象 我还可以使用它来更改默认的 Json 序列化器 看着JsonValueProvi
  • 将序列化表单传递给 Action 并绑定到模型

    我正在尝试绑定从 Ajax 调用收到的模型 但这不起作用 也许有人可以帮助我 我正在使用 Ajax 调用 ValidateFile Action ajax url Url Action ValidateFile Converter data
  • Razor ViewEngine HTML.Checkbox 方法创建隐藏输入。为什么? [复制]

    这个问题在这里已经有答案了 我在我的视图页面上编写了以下代码 Html CheckBox ChxName true 我得到了以下结果

随机推荐

  • Nativescript 中本机传感器的可访问性

    我决定选择在 Nativescript 跨平台 IOS Android 中实现应用程序 或者相应地使用 java swift 制作 真正的 本机应用程序 放弃明显的 1 代码库与 2 代码库讨论 我不确定 Nativescript 的局限性
  • Angularjs 中的动态表单名称属性

    当动态创建 inputName 时 人们将如何使用 formName inputName valid
  • 循环字符串重命名

    我正在运行一个截取屏幕截图并保存到文件的脚本 我是新手 在集成鼠标事件时遇到困难 所以现在我将手动完成部分任务 File C Users mydirectory image1 bmp Add Type AssemblyName System
  • 在 webview 片段中实现后退按钮

    我想在我的应用程序中实现后退按钮 我正在使用每个片段显示不同的网络视图 现在 如果我按后退按钮 无论我在哪里 它都会关闭应用程序 我希望它能像浏览器一样返回 我有我的MainActivity java fragment1 java等直到fr
  • Kotlin:可以通过元编程在编译时修改函数吗?

    在 JavaScript Python 等动态语言中 可以在运行时覆盖或 修改 函数 例如 为了修改alertJS 中的函数 可以这样做 const prev alert window alert window alert function
  • 如何在多行而不是单行输出上打印 Linux 组名称

    我尝试过 getent group 命令 id Gn user 和一些 sed 组合 但我认为我无法实现 因此向其他程序员伸出援手 我希望能够打印此 groups abc123输出 abc123 devops 构建测试设计 预期输出 gro
  • 如何同时运行两个FOR循环

    我正在使用加速度计 第一个代码是振动检测器 代码1 if sensor SensorManager SENSOR ACCELEROMETER long curTime System currentTimeMillis long now Sy
  • 通过 NSDate 过滤 Realm 中的查询会抛出 NSInvalidArgumentException

    我到处寻找 甚至访问了一些带有永远不会消失的病毒警告消息的可疑网站 但我无法弄清楚这一点 我只是想过滤Results
  • 如何从 Coldfusion 2016 中加载 jsoup Java 库?

    TLDR CreateObject 函数会抛出异常 java lang ClassNotFoundException 因为它看不到 java 类 JAR 文件 有什么想法我做错了什么吗 谢谢 Application cfc 的内容
  • PHP exec() 返回值是什么?

    我正在尝试使用 PHP exec 函数 如果 return var 参数与输出参数一起存在 那么执行命令的返回状态将被写入此 多变的 如果执行成功 则为 0 但是 如果出现错误 则可能是多个其他整数 我似乎无法在任何地方找到这些整数对应的内
  • 在vim中将命令映射到:w

    我怎样才能绘制地图Command S to w in vim 我已经尝试了其他线程中的所有内容 但似乎在 Mac OS X El Capitan 中不起作用 据说这在以前的版本中有效 但我尝试过 但没有成功 noremap
  • 带有成员 (operator[]) 函数的 invoke_result

    如何为成员函数正确调用invoke result 或者专门用于运算符成员函数 我试过std invoke result
  • 为什么 Swift 语言将 8 位二进制值赋给 Int8 类型的 var 时会出现溢出?

    当我在操场上写下这一行时 let firstBits Int8 0b11111111 出现错误 存储到 Int8 时整数文字溢出 由于 Int8 是有符号值 其范围是从 128 到 127 从左起第一位代表单数 减号或加号 其余 7 位代表
  • 改装和授权标头

    目前 我正在向我的请求添加授权标头 如下所示 文件 SomeFile cs public interface ITestApi Get api test id Task
  • 安装/编译 pylzma(lzma python 绑定)

    我已经向作者提出了这个问题website http www joachim bauch de projects pylzma comment page 1 comment 5211 但我想我也可以在这里问 我一直在尝试使用以下设置安装 py
  • Ansible:findall 正则表达式中变量的正确语法是什么

    我使用的是 Ansible 版本 2 9 我想做一个 GET 它返回一个信息块 从该信息中正则表达式一个 ID 该 ID 对应于我目前正在迭代的任何主机 然后使用该 ID 执行操作 我有正则表达式工作 https regex101 com
  • 从 pdf 和 word 文件中提取文本

    如何在 C 中从 pdf 或 word 文件中提取文本 删除粗体 图像和其他富文本格式媒体 您可以使用专为索引服务设计 由索引服务使用的过滤器 它们旨在从各种文档中提取纯文本 这对于在文档内部进行搜索非常有用 您可以将其用于 Office
  • \ufeff 标识符中的无效字符

    我有以下代码 import urllib request try url https www google com search q test headers usag Mozilla 5 0 Macintosh Intel Mac OS
  • 通过ELB访问AWS EC2实例

    我试图在弹性负载均衡器下设置两个实例 但无法弄清楚应该如何通过负载均衡器访问这些实例 我已经使用安全组设置了实例 以允许从任何地方访问某些端口 我可以使用 公共 DNS publicdns 主机名和端口 PORT 直接访问实例 http p
  • Asp.Net MVC3 - 如何创建动态 DropDownList

    我发现了很多关于此的文章 但我仍然不知道到底如何做到这一点 我正在尝试创建自己的博客引擎 我有用于创建文章的视图 我首先使用 EF 和代码 现在我必须填写应添加文章的类别数量 但我想将其更改为下拉列表 名称为类别 我的模型看起来是这样的 p