DropDownList在PostBack没有值

时间:2014-05-09 13:25:41

标签: c# asp.net-mvc razor

我创建了一个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>

当我在加载后直接点击搜索按钮时,DropDownList将“Default”作为第一项,我的网址如下:

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

是否可以指定可能不会在URL上传递具有空值的所有参数? 如果使用DropDownList,是否可以在选择“默认”时避免使用参数“IsActivated”?

2 个答案:

答案 0 :(得分:0)

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

使用jQuery onsubmit的示例:

How to use jQuery to onsubmit and check if the value is 2 - 5 characters?

答案 1 :(得分:0)

您可以尝试使用单独的viewmodel,其中包含选项列表和所选选项的属性。在GET请求操作方法中,您可以填充此列表并呈现视图,并且在POST操作方法中,您可以在模型绑定期间排除此属性,以便只有选定的项属性才会获得界。因此,您不需要ViewBagrouteValues或查询字符串参数,您的网址将始终保持干净。

修改

你可以这样做。

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 });

另外,请记住[Bind(Exclude="OptionList")]操作方法中的POST