c# - View 正在将匿名类型传递给 Controller

标签 c# asp.net-mvc

我使用的是 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/

相关文章:

c# - 如何为此 ActionLink 创建正确的路由值?

c# - 可以将 MemoryStream 与 FileStreamResult 一起使用吗?

c# - 使用 Entity Framework 从 ASP.NET MVC (C#) 中的 DropDown 获取 SelectedValue

asp.net-mvc - jquery在发布到服务器后无法在asp.net mvc中工作

C# Directory.Move 访问被拒绝错误

c# - SubmitChanges 在内部将所有字段添加为 where 子句,如何摆脱它

c# - 尝试在 C# winRT 中监听多播组时出现 UnauthorizedAccessException

c# - Html helper 'available' 如何用于 MVC 中的所有 View ?

C# 无法加载 DLL(找不到模块 HRESULT : 0x8007007E)

c# - 如何使用带有字符串格式查询的 C# 驱动程序查询 MongoDB?