回发时没有值的下拉列表

本文关键字:下拉列表 | 更新日期: 2023-09-27 18:02:29

我已经创建了一个DropDownList,它是从后面的代码初始化的:

代码隐藏:

List<SelectListItem> ddlIsActivated = new List<SelectListItem>
{
    new SelectListItem
    {
        Text = "Activated",
        Value = "0"
    },
    new SelectListItem
    {
        Text = "Not activated",
        Value = "1"
    }
};
ViewBag.ddlIsActivated = ddlIsActivated;

视图:

<div class="row">
    <div class="form-group col-xs-3">
        @Html.DropDownList("IsActivated", ViewBag.ddlIsActivated as List<SelectListItem>, "Default")
    </div>
</div>

当我在加载后直接点击搜索按钮时,下拉列表的第一项是"Default",我的URL看起来像这样:

http://localhost:51817/Log?SearchString=&IsActivated=

是否可以指定所有带有空值的参数都不能在URL上传递?在下拉列表的情况下,是否可以避免参数"IsActivated"时,"默认"被选中?

回发时没有值的下拉列表

当然,一种方法是当提交按钮被点击或激活时,将默认值的字段设置为禁用。那么他们就不去邮局了。

jQuery onsubmit示例:

如何使用jQuery onsubmit并检查值是否为2 - 5个字符?

您可以尝试使用一个单独的视图模型,其中包含选项列表和所选选项的属性。在GET请求操作方法中,您可以填充该列表并呈现视图,而在POST操作方法中,您可以在模型绑定期间排除该属性,以便仅选中的项属性将被绑定。因此,您不需要ViewBagrouteValues或querystring参数,并且您的URL将始终看起来干净。

编辑:

你可以这样做。

public class ViewModel
{
    public int SelectedId { get; set; }
    public Dictionary<int,string> OptionList { get; set; }
}

然后在视图中,

@Html.DropDownListFor(model => model.SelectedId, new SelectList(Model.OptionList, "Key", "Value"), null, null)

在你的GET动作方法中,

Dictionary<int,string> OptionList = GetOptionList(); // Populate from DB
return View(new ViewModel { OptionList = OptionList });

同时,记得在你的POST动作方法中加入[Bind(Exclude="OptionList")]