【问题标题】:ASP.NET MVC 5 site - edit view not selecting item in DropDownListForASP.NET MVC 5 站点 - 编辑视图未在 DropDownListFor 中选择项目
【发布时间】:2016-09-18 19:32:31
【问题描述】:

我有一个 MVC 5 站点...

可以选择将故事与 PlaceId 关联。空白 placeId 也是有效的。一个地方可以与多个故事相关联。

模型

public class Place
{
    public Guid Id { get; set; }
    public string PlaceName { get; set; }
}   

public class Story
{
    public Guid Id { get; set; }
    public Guid? PlaceId { get; set; }
    public string StoryName { get; set; }
}

我有几个要求。

  • 编辑故事时,我想要一个包含所有地点的下拉列表 被显示 - 与相关的地方(如果有的话) - 被选中。
  • 我想使用强类型的 DropDownListFOR(而不是 下拉列表)。
  • 我想添加一个“No Associated Place”,它将是 如果 PlaceId 为 null(并且应该将 null 传递回模型),则选择此选项。
  • 我想在 DropDownListFor 中添加一个 css class= "form-control"。

控制器(获取)

public ActionResult Edit(Guid Id)
{
    // Get Story
    var story = StoryRepo.SelectArticle(Id);

    // Put select list of all places in ViewBag
    ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id", "PlaceName", new { Id = story.PlaceId });

    // Return view
    return View(story);
}

可见

@Html.DropDownListFor(x => x.PlaceId, (IEnumerable<SelectListItem>)ViewBag.PlaceId, "No Associated Place",
                                    new { @class = "form-control" })

这可以很好地填充下拉列表,并且当您选择一个项目时,PlaceId 位于绑定到控制器的模型中。但是 - 在视图加载时它不会选择现有的 PlaceId。

ViewBag.PlaceId 行 new { Id = story.PlaceId } 中的最终参数不应该导致此选择吗?

我在网上找不到关于这个特定问题的任何信息 - 并且几乎找不到关于如何以我需要的方式将下拉列表绑定到强类型编辑视图的信息。

我怎样才能让它选择正确的项目? (也感谢我如何做这件事的任何改进)。

谢谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    我认为你需要更改以下代码

       // Put select list of all places in ViewBag
        ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id",
                                 "PlaceName", new { Id = story.PlaceId });
    

    成为

       // Put select list of all places in ViewBag
        ViewBag.PlaceId = new SelectList(PlaceRepo.SelectAll(), "Id", 
                                 "PlaceName", story.PlaceId);
    

    来自msdn的SelectedList的定义

    SelectList(IEnumerable, String, String, Object):初始化一个新的 SelectList 类的实例,通过使用指定的项目 列表、数据值字段、数据文本字段和选定值。

    这里是一个工作的demo

    更新demo

    希望对你有帮助

    【讨论】:

    • 你也看到了一些东西
    • 我想知道在您编写下拉列表的方式中,占位符是否与您合作?
    • 我不依附于这种做事方式——对更好的方式持开放态度。
    • 我在 dotnetfiddle 上构建了一个小演示,您可以查看演示,您需要在代码中做的唯一更改是直接在控制器中设置值而不将其作为匿名传递,并且我确认占位符也在工作
    • 谢谢 - 您的示例似乎缺少模型之间的一对多关系?
    猜你喜欢
    • 1970-01-01
    • 2014-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多