c# - 更改页面时如何从下拉列表中保留所选值?

标签 c# asp.net-mvc dropdown

我正在用 C#(使用 mvc)开发一个项目,我不得不在我的 View 中创建一个下拉过滤器,只有两个选择:YesNo

这是填充下拉列表的代码:

服务方式:

public List<SelectListItem> cancelledForDp()
{
    List<SelectListItem> cancelled = new List<SelectListItem>();
    var data = new[]
    {
        new SelectListItem { Value = "1",Text = "Yes" },
        new SelectListItem { Value = "NULL",Text = "No" }
    };
    cancelled = data.ToList();
    return cancelled;
}

Controller :

ViewBag.cancelledDp = utilService.cancelledForDp();

查看:

@Html.DropDownList("cancelled", (IEnumerable<SelectListItem>)ViewBag.cancelledDp, new { id = "chosenCancelled" })

数据库表中列中的值是:"1"NULL(我的意思是与过滤器相关的值)。我的过滤器工作正常。

当我使用值 No 进行过滤时,返回了一些页面。当我转到与第一页不同的页面(2 个或更多)时,不会保留下拉列表的值。它应该是 No,但它是 Yes

我在这里搜索了与我的问题相关的答案,但没有找到合适的答案。

我猜问题与 NULL 值有关,所以我尝试了这个:

在服务中:

public List<SelectListItem> cancelledForDp()
{
    List<SelectListItem> cancelled = new List<SelectListItem>();
    var data = new[]
    {
        new SelectListItem { Value = "1",Text = "Yes" },
        new SelectListItem { Value = "2",Text = "No" }
    };
    cancelled = data.ToList();
    return cancelled;
}

Controller :

if(cancelled == 2)
{
    cancelled = null;
}

但我得到了相同的结果。当我在过滤器中选择 No 并转到第二页时,Yes 出现在下拉列表中,而不是 No

我调试了一下,发现controller中方法的参数cancelled的值为null,当我进入到第二个页面时

如何在页面更改时保留下拉列表中的选定值?

最佳答案

您的代码正在生成 <option>值为 "1" 的元素和 "NULL" .正文"NULL"null 不同值(由空字符串识别 - 即它没有值)。如果属性值cancellednull那么第一个选项将被选中,因为不存在具有空值的选项元素(并且因为必须选择某些东西)

为了使其被选中,您的元素需要是 <option value="">No</option>您可以使用其中之一生成

public IEnumerable<SelectListItem> cancelledForDp()
{
    return new List<SelectListItem>()
    {
        new SelectListItem { Value = "1",Text = "Yes" },
        new SelectListItem { Value = "",Text = "No" }
    };
}

public IEnumerable<SelectListItem> cancelledForDp()
{
    return new List<SelectListItem>()
    {
        new SelectListItem { Value = "1", Text = "Yes" },
    };
}

并在 View 中使用

@Html.DropDownList("cancelled", (IEnumerable<SelectListItem>)ViewBag.cancelledDp, "No", new { id = "chosenCancelled" })

第三个参数创建带有 null 的 labelOption值(value)。

作为旁注,如果您的字段只能存储 2 个值,那么您应该使用 as database BIT字段使得属性是

public bool IsCancelled { get; set; }

不是int? cancelled (还是 string cancelled ?)

简单地使用

@Html.CheckBoxFor(m => m.IsCancelled)

在 View 中。我还建议您始终使用强类型 ***For()方法。

关于c# - 更改页面时如何从下拉列表中保留所选值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40220478/

相关文章:

c# - 如何创建报告库?

c# - 为什么要使用 params 关键字?

asp.net-mvc - 在 Razor View 中启用和禁用文本框 (ASP.Net MVC 3)

asp.net-mvc - 理解和使用 "Service Layers"- .NET MVC 5

html - Css z-index 子菜单

javascript - 在 jQuery 插件 dropdown.js 中添加更改事件的回调

c# - 浮点运算 - Double 类型的模运算符

c# - 在 .NET Core 2.0 中使用 JWT 基于权限访问资源

c# - NHibernate 和 Firebird 的性能问题

html - 将 primeNG p-dropdown 宽度设置为 min-content