在View Only中实现Html.DropDownListFor()

时间:2017-08-17 15:29:27

标签: asp.net asp.net-mvc asp.net-mvc-4 razor asp.net-mvc-5

我是Asp.Net(初级开发者)的新手。我正在开发一个项目,要求客户输入要存储在数据库中的数据。当我为模型创建模板视图时,我得到一个EditorFor()文本框,供客户输入数据。这是它的样子:

            <div class="form-group">
                @Html.LabelFor(model => model.ApplicantState, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.ApplicantState, new { htmlAttributes = new { @class = "form-control" } })
                    @Html.ValidationMessageFor(model => model.ApplicantState, "", new { @class = "text-danger" })
                </div>
            </div>

这很好用,除了我希望用户从选项的下拉列表中进行选择,而不是自己输入数据。如果我使用直接HTML进行下拉列表,这就是我想要做的事情:

            <div class="form-group">
                @Html.LabelFor(model => model.ApplicantState, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    <select id="applicantState">
                        <option disabled selected value> -- Please Select --  </option>
                        <option value="OH">Ohio</option>
                        <option value="CA">California</option>
                        <option value="TX">Texas</option>
                    </select>
                </div>
            </div>

我需要将此数据存储在模型的ApplicantState字段中。运行此项目的高级开发人员不希望我向模型或控制器添加代码来执行此操作;他希望我只在视图中执行下拉列表。

这就是我所拥有的......

             <div class="form-group">
                @Html.LabelFor(model => model.ApplicantState, htmlAttributes: new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.DropDownListFor(model => model.ApplicantState, new List<SelectListItem> {
                              new SelectListItem { Value = "" , Text = " -- Please Select --  "  },
                              new SelectListItem { Value = "OH", Text = "Ohio"},
                              new SelectListItem { Value = "CA", Text = "California"},
                              new SelectListItem { Value = "TX", Text = "Texas"}
                            })
                  </div>
              </div>

代码正在编译,我没有收到任何错误。对于之前完成此操作的人来说,这看起来是否正确?下拉列表选项是否会存储在ApplicantState字段中?我对自己所写的内容毫无信心。我只做过MVC控制器的下拉列表。我还不能通过提交虚假应用程序来测试代码。但是视图正确弹出。任何意见,将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:3)

因此:

  

运行此项目的高级开发人员不希望我向模型或控制器添加代码来执行此操作;他希望我只在视图中执行下拉列表。

您需要在Razor顶部实例化此词典:

var dictionary = new Dictionary<string, string>
{
    { "OH", "Ohio"},
    { "CA", "California"},
    { "TX", "Texas"}
};

然后用这个替换你的剃刀代码:

@Html.DropDownListFor(m => m.ApplicantState, dictionary.Select(d => new SelectListItem { Value = d.Key, Text = d.Value }).ToList(), " -- Please Select --  ");

这很干净,应该可行。之后你需要告诉你的同事,保存数据的字典应该属于你的模型,代码应该去那里。