我有一个从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项目中工作正常,我会收到错误
答案 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)