首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SelectList默认值不起作用

SelectList默认值不起作用
EN

Stack Overflow用户
提问于 2014-12-04 13:20:14
回答 2查看 471关注 0票数 0

今天,我在ASP.NET中的一个ASP.NET中的默认值出现了问题。

以下是我在互联网上发现的很多东西之后的做法:

代码语言:javascript
运行
复制
@{
  IEnumerable<SelectListItem> secteurSelectList = from x in Model.secteurList select new SelectListItem {
                                       Selected = (x.Id == this.GetSessionSecteurId()),
                                       Text = x.Secteur,
                                       Value = x.Id.ToString()
                                   };
  SelectList selectList = new SelectList(secteurSelectList, "Value", "Text", secteurSelectList.Where(x => x.Selected==true).FirstOrDefault().Value); }
  @Html.DropDownListFor(m => m.secteur, selectList)

下面是对我的实体的描述:在我使用的ViewModel中

代码语言:javascript
运行
复制
public List<AuditSecteur> secteurList { get; set; }

这是审计长的目标:

代码语言:javascript
运行
复制
public class AuditSecteur
{
    public int Id { get; set; }
    public string Secteur { get; set; }
}

其结果是:

代码语言:javascript
运行
复制
<select data-val="true" data-val-number="The field Secteur de l'audit must be a number." data-val-required="The Secteur de l'audit field is required." id="secteur" name="secteur">
    <option value="1">option1</option>
    <option value="2">option2</option>
    <option value="3">option3</option>
</select>

对于所选的对象,SecteurSelectedList有一个true项:

SelectedList也是:

谢谢你帮我

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-04 23:56:33

使用强类型帮助程序的全部目的是绑定您的模型属性,因此在

代码语言:javascript
运行
复制
@Html.DropDownListFor(m => m.secteur, selectList)

如果secteur的值与您的一个选项的值不匹配,那么它将不会被选中(实际上,因为它找不到匹配,第一个选项将被选中,因为需要选择一些东西)。

但是,您的代码还有许多其他问题。首先创建IEnumerable<SelectListItem> (设置Selected属性是没有意义的,因为它被助手忽略了),然后根据下一行的第一个创建另一个IEnumerable<SelectListItem> ( SelectList) (要点是什么?)生成的选项的值基于AuditSecteurAuditSecteur属性,但随后绑定到Secteur属性,因此无论如何它都不会回发正确的值。目前还不清楚您如何使用它(您还没有包含模型、控制器或视图),但是正确的方法应该是这样的

视图模型

代码语言:javascript
运行
复制
public class SecteurVM
{
  [Display(Name = "Secteur")]
  [Required]
  public int? SelectedSecteur { get; set; }
  public SelectList SecteurList { get; set; }
}

控制器

代码语言:javascript
运行
复制
public ActionResult Create()
{
  List<AuditSecteur> secteurList = // get AuditSecteur items from the database
  SecteurVM model = new SecteurVM();
  model.SecteurList = new SelectList(secteurList, "ID", "Secteur");
  model.SelectedSecteur = // set the default value you want selected here
  return View(model)
}

[HttpPost]
public ActionResult Create(SecteurVM model)
{
  // model.SelectedSecteur contains the ID of the selected item
}

视图

代码语言:javascript
运行
复制
@model SecteurVM
....
@Html.LabelFor(m => m.SelectedSecteur)
@Html.DropDownListFor(m => m.SelectedSecteur, Model.SecteurList, "--Please select--")
@Html.ValidationMessageFor(m => m.SelectedSecteur)

如果SelectedSecteur的值与列表中项的ID属性之一相匹配,则在显示视图时将选择该选项。

票数 1
EN

Stack Overflow用户

发布于 2014-12-04 16:16:10

您将DropDown绑定到模型的secteur属性,而下拉列表的值特征是Id,因此下拉列表在进行预选时不会找到相应的值。

在这里,即使您已经定义了pre-selected项,它也会在呈现时进行reset,所以我建议您将下拉列表绑定到Id而不是secteur

代码语言:javascript
运行
复制
@Html.DropDownListFor(m => m.Id, selectList)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27295108

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档