C# ViewModels和创建/编辑操作出错

C# ViewModels和创建/编辑操作出错,c#,asp.net-mvc,viewmodel,C#,Asp.net Mvc,Viewmodel,在NerdDinner教程之后,我尝试使用Northwind数据库创建ASP.NET MVC 2 webapp,但现在我在尝试编辑产品时不断遇到以下错误: 类型为“Supplier”的对象的成员“SupplierID”的值已更改。 无法更改定义对象标识的成员。 考虑添加具有新标识的新对象,并删除现有的对象。 只有当我更改类别和/或供应商(都是下拉列表)时,其他字段(复选框和文本框)才正常 我也无法创建新产品,因为由于某种原因,模型.IsValid总是返回false(没有例外) 我做错了什么 Pr

在NerdDinner教程之后,我尝试使用Northwind数据库创建ASP.NET MVC 2 webapp,但现在我在尝试编辑产品时不断遇到以下错误:

类型为“Supplier”的对象的成员“SupplierID”的值已更改。 无法更改定义对象标识的成员。 考虑添加具有新标识的新对象,并删除现有的对象。

只有当我更改类别和/或供应商(都是下拉列表)时,其他字段(复选框和文本框)才正常

我也无法创建新产品,因为由于某种原因,
模型.IsValid
总是返回false(没有例外)

我做错了什么

ProductController.cs ProductViewModel.cs ProductForm.ascx

型号.产品.供应商ID)%>
model.Product.Supplier.SupplierID,model.Suppliers)%>

当然,这些代码只是每个控制器和视图的摘录。
ProductViewModel
是完整的代码。我省略了
ProductRepository
类。

在我们的控制器操作方法中放置一个断点并读取modelstate对象。检查每把钥匙是否有错误。对错误的描述将有所帮助。在那次尝试之前

<div class="editor-field">
            <%= Html.DropDownListFor(model => model.SupplierID, Model.Suppliers) %>
        </div>

model.SupplierID,model.Suppliers)%>

这是我在L2S中通过列表框编辑外键值时所做的操作。不确定是否使用EF。

在控制器操作方法中放置断点并读取modelstate对象。检查每把钥匙是否有错误。对错误的描述将有所帮助。在那次尝试之前

<div class="editor-field">
            <%= Html.DropDownListFor(model => model.SupplierID, Model.Suppliers) %>
        </div>

model.SupplierID,model.Suppliers)%>

这是我在L2S中通过列表框编辑外键值时所做的操作。不确定您是否使用EF。

而不是Nerddinner,请阅读Steve Sanderson关于MVC的书。他有话要说的是为演示而编写的样本,而不是工作示例。@awrigley,NerdDinner是一个工作示例:我知道。我看过录像。我读过这本书。我也读过史蒂夫·桑德森的书。从后面的例子中,你可以得到一个更好的MVC“工作”概念。即使它有效,Nerddinner仍然是作为一种演示而创建的,而不是作为解决常见编程问题的工作马解决方案。他有话要说的是为演示而编写的样本,而不是工作示例。@awrigley,NerdDinner是一个工作示例:我知道。我看过录像。我读过这本书。我也读过史蒂夫·桑德森的书。从后面的例子中,你可以得到一个更好的MVC“工作”概念。即使它能工作,Nerddinner仍然是作为一个演示而创建的,而不是作为一个解决常见编程问题的工作马解决方案。哦!差不多就是这样!取而代之的是dropdownlist中的“model.Product.Supplier.SupplierID”,我做了“model.Product.SupplierID”!谢谢!!哦差不多就是这样!取而代之的是dropdownlist中的“model.Product.Supplier.SupplierID”,我做了“model.Product.SupplierID”!谢谢!!
        <div class="editor-label">
            <%= Html.LabelFor(model => model.Product.SupplierID) %>
        </div>

        <div class="editor-field">
            <%= Html.DropDownListFor(model => model.Product.Supplier.SupplierID, Model.Suppliers) %>
        </div>
<div class="editor-field">
            <%= Html.DropDownListFor(model => model.SupplierID, Model.Suppliers) %>
        </div>