【问题标题】:MVC 3 Dropdown losing selected value with ViewBagMVC 3 Dropdown 使用 ViewBag 丢失所选值
【发布时间】:2011-04-28 08:53:44
【问题描述】:

我遇到了下拉菜单和 viewbag 的问题。我在控制器中使用以下代码设置下拉列表:

        applicationGuid = new Guid(form["applicationList"]);

        var applications = _applicationRepository.List();

        ViewBag.applicationList = new SelectList(applications, "Id", "Name", applicationGuid);

在视图中,这完美地工作并返回先前选择的值(applicationGuid):

 @Html.DropDownList("applicationList", "")

现在我想使用以下代码,因为我想向下拉列表中添加一些属性:

 @Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" }) 

但由于某种原因,选择的值没有被渲染(即使它被传递给视图,我可以看到 selected = "true" 与 ViewBag SelectList 中的正确项目相对应)。

上面的两个例子呈现为(这个有 selected="selected"):

<select id="applicationList" name="applicationList"><option value=""></option><option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select>

就这样(选中的已经消失了!!):

<select class="required" id="applicationList" name="applicationList" rel="0"><option value=""></option><option value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option><option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option></select> 

谁能解释我在这里做错了什么以及为什么它会丢失所选值?我发现了许多关于视图数据项的名称如何不能冲突等的帖子,但我已经用随机名称将其剥离了,但似乎没有任何效果!这是 MVC3 中的问题吗?

【问题讨论】:

    标签: c# html asp.net-mvc-3


    【解决方案1】:

    问题似乎在于,当您将SelectList 作为参数传递给Html.DropDownList() 时,它不希望它与实际下拉列表具有相同的名称。

    我复制了你的代码,遇到了和你一样的问题。

    但是一旦我改变了

    @Html.DropDownList("applicationList", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" })
    

    @Html.DropDownList("applicationListX", ViewBag.applicationList as SelectList, "", new { rel = "0", @class = "required" })
    

    它产生了工作输出:

    <select class="required" id="applicationListX" name="applicationListX" rel="0"><option value=""></option>
    <option selected="selected" value="2f666645-9b28-406f-bd9f-9ecc009346a6">app1</option>
    <option value="898cbbb5-5dff-4378-b15a-9ecc00b8242f">app2</option>
    </select>
    

    我不知道为什么会这样,但有你的解决方法。

    【讨论】:

    • 感谢卡森的回复。我已经尝试过了,但它对我不起作用。刚刚又试了一次,还是一样的输出。不知道我对你有什么不同。
    • 算了....这行得通!!当我更改名称时,我忘记更改执行此操作的一些代码: if (form["applicationListX"] != "" && form["applicationListX"] != null) applicationGuid = new Guid(form["applicationListX" ]);所以我失去了我的价值!感谢您的帮助。
    • 非常感谢伙计!我正在疯狂地排除正在发生的事情。节省了我的工作时间。
    【解决方案2】:

    经过几天的修改并且不想更改选择列表的名称(因为我不想在回发时破坏模型的自动绑定),this article 末尾的替代解决方案向我展示了大大地。不要使用 ViewBag。改用 ViewData,名称与模型字段的名称相同,并且要么不向 DropDownList 传递任何其他内容,要么将 null 作为第二个参数传递,以防您需要 HTML 属性的第三个参数(我做过)。

    【讨论】:

    • Oh, and this only bit me when the value of the option items had GUIDs in it.如果它还有其他东西,它对我有用。去图吧。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    相关资源
    最近更新 更多