ASP.NET MVC 4:为强类型视图上使用的DropdowlistFor选择默认值

时间:2013-03-01 11:01:33

标签: razor asp.net-mvc-4 html.dropdownlistfor

也许这个问题已被提出,但我找到的答案并不清楚。

我想选择下拉列表的默认值。 我有一个国家列表,并根据区域代码通过Thread.CurrentThread.CurrentCulture进行检索,我想选择用户的国家。

通过我的方法是否可行:

查看

@model Question
@Html.DropDownListFor(b => b.SelectedAnswer,new SelectList(Model.Answers,"ID","Country"))

模型

 public class Question
    {

        public int ID { get; set; }
        public string Country { get; set; }

        public List<Answer> Answers { get; set; }
        [Required]
        public int SelectedAnswer { get; set; }
        public int Order { get; set; }

        public Question()
        {
            Answers = new List<Answer>();
        }
    }

谢谢。

2 个答案:

答案 0 :(得分:1)

我打算将此作为评论添加,但是篇幅太长,如果我有帮助,你可以接受这个作为答案。

这是我用来实现这个的方法;

首先,在viewmodel中我有以下

public int FooID { get; set; }
public IEnumerable<SelectListItem> FooList { get; set; }

FooID既是默认值(或当前选中的),也是用于收集结果的属性。

我有一个构建FooList的函数,它返回的类型 列表,使用每种项目的格式:

new SelectListItem { Text = i.Name, Value = i.FooID.ToString() };

在输出viewmodel之前,当前值被插入到FooID中,或者如果这是一个新项目,我通常会将值设置为1,即默认值。

然后输出;

@Html.DropDownListFor(m => m.FooID, Model.FooList)

请记住,FooID将作为字符串传递,因此需要将其作为字符串FooID参数收集,并转换为Int。只要在将viewmodel从控制器传递给视图之前设置FooID,FooList中其值等于FooID的项将被设置为默认值...例如;

public ActionResult MyAction()
    {
        MyVM vm = new MyVM();
        vm.FooID = 1;
        vm.FooList = FunctionToGenerateFooList();

        return View(vm);
    }

答案 1 :(得分:0)

实际上,您应该将下拉列表作为包含SelectListItem的列表传递。然后,对于每个国家/地区,将文本作为国家/地区代码,并为其分配值。然后,在初始化模型时,收集文化,并找到列表中的哪个项目具有匹配的文本

    Thread.CurrentThread.CurrentUICulture.Name; 

并将其value属性分配给SelectedAnswer。