2

我正在开发一个 MVC 项目。我有一个带有选项标签“选择任务”的下拉列表的视图。现在与此下拉列表绑定的整数属性不是必填字段。

但是在我尝试保存之后,我也得到了带有红色边框的下拉菜单,表明它是必需的。当我分析时,我发现选项标签的值为空。

当我为选项标签的值输入 0 时使用萤火虫,视图被保存,没有模型状态错误。难道我做错了什么 ?如何避免呢?

View 

@Html.DropDownListFor(model => model.projecttaskid, new SelectList((IList<SelectListItem>)ViewData["MyTasks"], "Value", "Text"),"Select Task", new { @class = "span2" })

Model public int projecttaskid { get; set; }控制器它没有达到控制器动作。

4

3 回答 3

0

例如,您使用参数的重载DropDownListForoptionLabel您的“选择任务”参数。

如果未选择任何项目,则将其视为“已选择选项”,并为model.projecttaskid.

0最简单的方法是在创建列表时添加一个具有值的元素( ViewData["MyTasks"])

例如:

Value = 0;
Text = "Select Task;

并使用不带 optionLabel 的 DropDownListFor 重载。

[顺便说一句,使用 ViewModels 而不是 ViewData 会是一件好事,但这是另一个问题]

*编辑 *

我们确实使用一些扩展方法来管理这些情况:

public static IEnumerable<SelectListItem> ToSelectListItem<T, TValue, TText>(
            this IEnumerable<T> enumerable,
            Func<T, TText> text,
            Func<T, TValue> value)
        {
            return enumerable.Select(item => new SelectListItem
            {
                Text = text(item).ToString(),
                Value = value(item).ToString()
            }).AsEnumerable();
        }

public static IEnumerable<SelectListItem> WithDefaultZeroValue(this IEnumerable<SelectListItem> selectListItems, string chooseText/* = ChooseText*/)
        {
            IList<SelectListItem> items = selectListItems.ToList();
            items.Insert(0, new SelectListItem { Value = "0", Text = chooseText });

            return items.AsEnumerable();
        }

用法

var myList = mySourceForDropDown.ToSelectListItem(m => m.TextField, m => m.ValueField)
                                .WithDefaultZeroValue("SelectTask")
于 2013-05-23T13:49:36.367 回答
0

projecttaskid不可为空。除非您为下拉列表提供默认值,否则模型将无法正确绑定,这就是即使模型字段未标记为,您也会收到验证错误的原因[required]

编辑:默认值是指列表中值为0的项目,因为默认值为projecttaskid0。

于 2013-05-23T14:03:35.303 回答
0

用这个:

 @Html.DropDownListFor(model => model.Type, new SelectList(Enum.GetNames(typeof(Enums.TenderType))), new Dictionary<string, object>() { { "data-val", "false" } })
于 2013-12-22T06:23:57.213 回答