C# 在MVC操作中使用基类作为重载,但收集所有数据
我目前有两个类继承了BaseGridRowModel,例如:C# 在MVC操作中使用基类作为重载,但收集所有数据,c#,javascript,asp.net-mvc,asp.net-mvc-3,overloading,C#,Javascript,Asp.net Mvc,Asp.net Mvc 3,Overloading,我目前有两个类继承了BaseGridRowModel,例如: 人格模型 城市模型 我已经创建了一个控制器,它接受基底作为输入,并将其推送到缓存中供以后使用 [HttpPost] public ActionResult RowCheckedStatusChanged(BaseGridRowModel row) { try { 然后调用该方法,在ajax调用中将网格行推送到控制器 $.ajax({ type: '
- 人格模型
- 城市模型
[HttpPost]
public ActionResult RowCheckedStatusChanged(BaseGridRowModel row)
{
try
{
然后调用该方法,在ajax调用中将网格行推送到控制器
$.ajax({
type: 'POST',
url: "/Central/MyGrid/RowCheckedStatusChanged",
data: rowData.toJSON(),
cache: false,
但是,所有额外字段都将丢失,因为它们不是基的一部分。这总是变为null并引发异常
var rowData = (row as PersonRowModel);
if (rowData == null)
{
throw new Exception("Row must inherit BaseGridRowModel.");
}
我以后需要这些字段,以便从缓存中提取。有办法拯救他们吗
谢谢问题在于模型绑定器正在将数据绑定到BaseGridRowModel。本质上,它是将发布的数据反序列化到BaseGridRowModel中 因此,模型绑定器不够聪明,无法识别额外的字段并神奇地确定是否有一个类继承了动作中的类并使用它 如果需要数据,您可能会认为可以为各种类型创建重载,然后将其导入通用版本,但我相信这也行不通。您可以创建自己的自定义模型绑定器,该绑定器将查找额外的数据并创建正确的类型,然后有效地将其向上转换为BaseGridRowModel 或者,您可以只查看HttpContext.Current.Request.Form以获取额外字段。或者您可以将字段添加到方法中。。。即
public ActionResult RowCheckedStatusChanged(BaseGridRowModel row, string otherdataItem1, string otherdataItem2)
你的问题不够详细。看起来缓存可能是问题所在,但您没有对此发表任何意见,更不用说有任何代码了。细节!谢谢最后,我使用HttpContext.Current.Request.Form和UpdateModel来填充作为额外参数传递的构造类型。但是,需要这样做来解决反射问题: