如何设置使用帮助扩展构建的EnumDropDownListFor的初始值?

时间:2014-05-23 20:28:52

标签: asp.net-mvc enums

我按照MVC5的教程编写了一个帮助程序扩展编码,以使用枚举填充下拉列表。这完全适用于使用编辑视图。

在创建页面上,我填写ddl并选择没问题。但是当我想更新编辑视图上的值时,使用与创建时一样填充的ddl,我无法将实际值(来自数据库)默认为显示值。

我搜索过高低,但开始认为无法完成。我不确定代码会有什么帮助,所以这里可以了;

编辑视图中的我的ddl

@Html.EditorFor(model => model.ProjectStatus)

ProjectStatus是枚举,用于检索辅助扩展中的枚举值并填充ddl。

所以我的ddl可能包含以下状态:

新, WIP, 被拒绝, 固定, 关闭

我的当前值可能=新的。因此,当我加载编辑视图时,我希望将值New默认为ddl,并且能够通过使用ddl选择另一个来更改此值。

我想要默认的值实际上是在视图中(model.Status)。我只是无法弄清楚如何将其包含在上面的代码中。

我希望这是有道理的,也许有任何帮助。

感谢阅读。

2 个答案:

答案 0 :(得分:0)

我不确定你的扩展方法是什么样的。如果您想要更直接的答案,则需要包含有关具体实施的更多详细信息。话虽这么说,这是来自Autoquoter.com

上的edit.cshtml模板的一些示例代码
<div class="control-group">
     @Html.LabelFor(model => model.AddonType)
     <div class="controls">
          @Html.DropDownListFor(model => model.AddonType, EnumHelper.SelectListFor((AddonType)Model.AddonType))
          @Html.ValidationMessageFor(model => model.AddonType)
     </div>
</div>

注意EnumHelper.SelectListFor的参数。我们将当前值传递给辅助方法。然后我们将它作为SelectList构造函数的最终参数添加。

 public static SelectList SelectListFor<T>(T selected) where T : struct
    {
        Type t = typeof(T);
        return !t.IsEnum ? null
                         : new SelectList(BuildSelectListItems<T>(), "Value", "Text", selected.ToString());
    }

答案 1 :(得分:0)

对于任何可能感兴趣的人,我使用jquery修复了这个问题。

我被挂在由枚举,剃须刀和HTML帮助器等填充的下落中。我看着生成的原始html并从那个角度接近它。

以下代码对我有用,但我不是专家,所以可能有更好的解决方案

// set initial value of Status ddl
$(document).ready(function () {
var initialValue = $("#@Html.IdFor(model => model.Status)").val();
    $("select option").filter(function () {
        return $(this).text() == initialValue;
    }).prop("selected", true);
});

我希望这会有所帮助。