0

我正在为名为“事件”的属性创建一个带有下拉列表的表单。不幸的是,这是一个保留字,所以它不会像往常一样工作:

@Html.DropDownListFor(x => x.Event, new SelectList(ViewData["Events"] as IEnumerable<JFS.Data.Model.Event>, "Id", "Name"))

在控制器中我不能单独获取这个值,因为它是一个保留字,所以如果我这样做:

public ActionResult Create(int event)
{
etc etc
}

它抛出一个错误。

我最理想的做法是更改下拉列表的名称,如下所示:

@Html.DropDownListFor(x => x.Event as eventId, new SelectList(ViewData["Events"] as IEnumerable<JFS.Data.Model.Event>, "Id", "Name"))

但这不起作用。谁知道改名的正确方法?:-)

4

1 回答 1

2

您不能更改 HTML 助手生成的名称,这是设计使然。相反,您可以做的是更改操作参数的名称并为其添加前缀,@从而允许在 C# 中使用保留字作为变量名称:

public ActionResult Create(int @event)
{
    etc etc
}

但一般不建议使用保留字作为变量名,除非绝对必要。在您的情况下,这不是绝对必要的,因为有一个更好的解决方案,当然包括使用视图模型:

public class CreateEventViewModel
{
    public int Event { get; set; }
}

然后让您的控制器操作将此视图模型作为参数:

public ActionResult Create(CreateEventViewModel model)
{
    etc etc
}
于 2013-02-20T09:54:58.023 回答