gpt4 book ai didi

c# - asp.net mvc 5 DropDownList nullable int default option not null

转载 作者:行者123 更新时间:2023-11-30 15:31:02 24 4
gpt4 key购买 nike

我有一个关于 mvc DropDownList 的问题,有很多关于它的话题,但没有一个有同样的问题。

我想要我的 DropDownList 的默认选择选项,但我还需要“所有”项目选择的附加选项。

所以我的 Controller 将默认值 2 绑定(bind)到下拉列表

 public ActionResult Index(int? All = 2){ ...

在cshtml中我有

 @Html.DropDownList("All","All items")

所有列表都是这样填的

 ViewData["All"] = new SelectList(CommonLists.property_types.Select(x => new { v = x.Value, t = x.Key.ToLower() }), "v", "t", All);

属性类型

  public static Dictionary<string, int> property_types = new Dictionary<string, int>() { 
{ "House", 1 }, { "Flat", 2 }, { "Garden", 3 }

所以它应该像这样工作

  • 首次输入时默认选择值为 2,等于“flat”,仅显示“flat”项(有效)
  • 用户可以将其更改为列表中的其他选项(有效)
  • 无论选择“所有项目”的类别如何,用户都可以更改为一次查看所有项目(这不起作用)

我认为它应该工作,但令我惊讶的是,当我选择“所有项目”时,mvc 不返回 null 它只返回默认的 int 值 2,所以基本上没有办法查询所有项目。

这应该像那样工作吗?自动生成的“所有项目”是空值,所以我假设 mvc 会将其转换为 null,但事实并非如此。

如何解决这个问题?

最佳答案

问题不是 POST 没有返回 null,而是 POST 返回了 null

因为您的操作具有默认值 2。当操作接收到 null 时,它会使用默认值初始化变量,在这种情况下为 2

public ActionResult Index(int? All = 2)

您想要做什么才能区分“所有项目”和应用程序的默认行为。在这种情况下,默认行为是仅显示平面

您可以通过在 Controller 中构建“所有项目”来实现该目标。

public ActionResult Index(int? All = 2)
{
var propertyTypesSelectList = new SelectList(property_types.Select(x => new {v = x.Value, t = x.Key.ToLower()}), "v", "t", All).ToList();
propertyTypesSelectList.Insert(0, new SelectListItem() { Value = "0", Text = "All items"});

ViewData["All"] = propertyTypesSelectList;
return View();
}

并将您的 View 更改为此

@Html.DropDownList("All") 

关于c# - asp.net mvc 5 DropDownList nullable int default option not null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21237129/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com