Asp.net mvc 更改Html.DropDownListFor的名称-MVC Razor

Asp.net mvc 更改Html.DropDownListFor的名称-MVC Razor,asp.net-mvc,razor,Asp.net Mvc,Razor,我正在创建一个表单,其中包含一个名为“Event”的属性的下拉列表。不幸的是,这是一个保留字,因此无法正常工作: @Html.DropDownListFor(x => x.Event, new SelectList(ViewData["Events"] as IEnumerable<JFS.Data.Model.Event>, "Id", "Name")) 它抛出了一个错误 理想情况下,我希望更改下拉列表的名称,如下所示: @Html.DropDownListFor(x =&

我正在创建一个表单,其中包含一个名为“Event”的属性的下拉列表。不幸的是,这是一个保留字,因此无法正常工作:

@Html.DropDownListFor(x => x.Event, new SelectList(ViewData["Events"] as IEnumerable<JFS.Data.Model.Event>, "Id", "Name"))
它抛出了一个错误

理想情况下,我希望更改下拉列表的名称,如下所示:

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

但这不起作用。有人知道更改名称的正确方法吗?:-)

您不能更改由HTML帮助程序生成的名称,这是通过设计实现的。您可以改为更改动作参数的名称,并在其前面加上
@
,这样就可以使用C#中的保留字作为变量名:

public ActionResult Create(int @event)
{
    etc etc
}
但一般来说,除非绝对必要,否则不建议使用保留字作为变量名。在您的情况下,这不是绝对必要的,因为有一个更好的解决方案,当然包括使用视图模型:

public class CreateEventViewModel
{
    public int Event { get; set; }
}
然后让控制器操作将此视图模型作为参数:

public ActionResult Create(CreateEventViewModel model)
{
    etc etc
}

为什么要加前缀?完美-救命!非常感谢呼和浩你看到达林了吗你需要一点指示:D@IamStalker,它应该加前缀,因为是C#中的保留字。如果要使用保留字(如
If
事件
foreach
,…)作为变量名,可以在它们前面加上
@
。但正如我在回答中已经指出的,这是不推荐的,也不应该使用,除非你绝对没有其他方法,这在我个人身上从未发生过。谢谢Darin。如果我在这种情况下使用前缀(因为这是一个罕见的例子),可能会出现什么问题?
public ActionResult Create(CreateEventViewModel model)
{
    etc etc
}