C# 视图模型id属性与url中的参数同名

C# 视图模型id属性与url中的参数同名,c#,asp.net-mvc-4,entity-framework-5,C#,Asp.net Mvc 4,Entity Framework 5,在我的MVC4和EF5项目中,我有一个充当数据库模型和视图模型的类。 在该类中,PK是一个名为Id的属性。在视图中,我使用@Html.HiddenFor(m=>m.Id)将该Id加载到HiddenField中。要在第一次输入url时加载视图,我调用一个名为Index(int?Id)的操作。 行动守则如下: entry = context.Entries.Where(e => e.Id > Id.Value && e.Revised == false).First();

在我的MVC4和EF5项目中,我有一个充当数据库模型和视图模型的类。 在该类中,PK是一个名为Id的属性。在视图中,我使用@Html.HiddenFor(m=>m.Id)将该Id加载到HiddenField中。要在第一次输入url时加载视图,我调用一个名为Index(int?Id)的操作。 行动守则如下:

entry = context.Entries.Where(e => e.Id > Id.Value && e.Revised == false).First();
正如您所看到的,我寻找的Id大于传入的Url,这没关系,这就是我想要的

现在弄清楚:我键入一个类似localhost/Index/Index/1609e的url,下一个是1610,但隐藏字段保留1609。我自己发现它与属性名“Id”有关,因为我更改了名称,结果正如我预期的那样


为什么会发生这种情况?如果我希望以这种方式使用前面描述的预期行为,该怎么办?

似乎是一个很好的案例,说明了不使用模型对象作为ViewModel对象。像这样的细微差别最终会让你丧命的。的确如此。因此,最好的方法是同时采用这两种模型?一个用于视图,另一个用于数据?模型和视图模型关注的是完全不同的事情,但它们使用许多相同的“词语”来描述它们所做的事情。当你试图像这样合并它们时,你最终会混淆自己,打破关注点之间的分离。视图模型可以知道URL并正确提取数据,然后查询模型以获得适当的数据。如果我有两个模型,假设是类和类模型,最后一个将是视图模型,那么如何保存来自该类模型的数据?我是否必须实例化一个类并按属性填充属性,将这个freshy对象传递给context并在调用context.SaveChanges()后传递?通常就是这样做的。但是,如果没有看到您的项目,就很难推荐特定的方法。尽管听起来需要做很多工作,但文本框和数据库列是独立的,具有不同的角色和规则。试图将它们混合在一起会导致越来越多的麻烦——最好将它们分开。