我使用的是 C# 和 MVC 5,但出于某种原因,我的 View 将匿名类型传递回 Controller ,它对此并不满意。具体报错是:
An exception of type 'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException' occurred in System.Core.dll but was not handled in user code
Additional information: 'object' does not contain a definition for 'Id'
这是具体的 Controller 函数签名:
[HttpPost, ParameterBasedOnFormName("save-continue", "continueEditing")]
public ActionResult TaskEdit(dynamic model, bool continueEditing)
当我尝试在该函数中引用 model.Id
时发生错误。 View 的开头是这样的:
@model ProjectModelShopModel
// ...
@using (Html.BeginForm(null, null, FormMethod.Post, Model))
{
// code
}
如何解决这个错误?如有必要,我可以提供更多代码。
编辑:我在 TaskEdit
中使用动态类型,因为三个 View 调用该函数,每个 View 具有不同的模型。每个的功能几乎相同。我不使用继承,因为我早期搞砸了太多,现在要修复它需要方式太多的工作。
最佳答案
This post确认(无来源)我的 guess默认的 modelbinder 不能真正使用 dynamic
参数。
默认模型绑定(bind)器查找参数类型的现有属性(dynamic
很少),然后尝试将发布的字段映射到这些属性。
解决方法是使用 public ActionResult TaskEdit(FormCollection formCollection)
并在你的 Controller 中填写你的模型,或者到use a custom modelbinder .
关于c# - View 正在将匿名类型传递给 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32403644/