7

有没有办法在没有自定义模型绑定的情况下处理这个问题?

public class MyViewModel {
  public string UserId { get; set; }
  public IJob Job { get; set; }
}

public interface IJob {
  public long Id { get; set; }
  public string CompanyName { get; set; }
}

public class FullTimeJob : IJob {
  // omitted for brevity
}

public class Internship : IJob {
  // omitted for brevity
}

我遇到的问题是默认模型绑定器中出现错误,因为它不了解要实例化的 IJob 实现。当我创建 MyViewModel 时,我将 FullTimeJob 的一个实例设置到它的 Job 属性中。我猜 ASP.NET 不能保留实现类型?

对此的最佳实践解决方案是什么?

4

2 回答 2

1

视图只是 UI 和控制器之间的数据载体。因此,您可以简单地将 Id 和 CompanyName 属性添加到您的视图中。因为您要做的就是从 UI 中获取 Id 和公司价值。从 UI 获取数据时,它是实习还是全职工作可能并不重要。当您处理从 UI 获得的数据时,这可能很重要,但这不是 View 的责任。

于 2012-12-22T16:44:51.257 回答
0

一种选择虽然不是特别优雅,但可能如下:

public class MyViewModel {
    public string UserId { get; set; }
    public FulltimeJob FulltimeJob { get; set; }
    public InternJob InternJob { get; set; }

    public IJob Job { get { return FulltimeJob ?? InternJob; } }
}

这使您可以通过 Job 属性轻松访问共享属性,同时保持对任何特定于类的属性的访问。

然后,您可以检查 POST 控制器方法中填充了哪些属性并采取相应措施。

于 2012-12-23T03:42:45.437 回答