为什么这在asp.net MVC 3中不起作用?

时间:2011-06-17 09:41:00

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

我有一个从2迁移到MVC 3的项目。

如果我在新的MVc 3项目中写相同,他们可以正常工作,但我的迁移项目不适用于此代码

 <select id="selrecipetype">
                            @foreach (custom.Type type in rectypes)
                            {
                                <option value="@(type.ID)">@(type.Type)
                                </option>
                            }
                        </select>

Compiler Error Message: CS1525: Invalid expression term ';'
Line 217:                                <option value="@(type.ID)">@(type.Type)
Line 218:                                </option>
Line 219:                            }
Line 220:                        </select>

所以在这段代码中发生了什么错误。

如果我写这个同样没有用

                                 @foreach(Categories.Article category in   类别)                               {                                   
  • @(category.Name)
  •                                   }                           

    我想知道为什么它不起作用,如果我在新的MVC 3项目中工作正常,我会收到错误

    2 个答案:

    答案 0 :(得分:3)

    呃,这样的代码不一定存在,为什么要关心它是否有效?更不用说这个<select>没有名称意味着除了使用javascript之外,所选的值永远不会发布到服务器。首先,只需在IDE中选择此代码,然后按键盘上的Del.按钮即可。

    在ASP.NET MVC中生成下拉列表的正确方法是使用Html.DropDownListFor帮助程序:

    @Html.DropDownListFor(
        x => x.SomePropertyOnYourViewModelToBindTheResultTo,
        new SelectList(rectypes, "ID", "Type")
    )
    

    或者如果您没有强类型视图(当然您应该,但谁知道):

    @Html.DropDownList(
        "SomeProperty",
        new SelectList(rectypes, "ID", "Type"),
    )
    

    答案 1 :(得分:0)

    您应该使用HTML类进行选择列表。您应首先在控制器中创建选择列表,如下所示:

    var types = typeRepo.GetRecTypes();
    ViewBag.SelectList = new SelectList(types, "KeyFieldName", "TitleFieldName");
    

    然后在你看来:

    @Html.DropDownList("SelectListName", (SelectList)ViewBag.SelectList)