ViewBag属性已更改为对象类型

时间:2013-06-10 11:41:22

标签: asp.net asp.net-mvc-3 asp.net-mvc-4 razor razor-2

在我的控制器中,我将模型对象放到viewbag中,如下所示:

ViewBag.fileModel = new ViewFileModel(id)

public class ViewFileModel
    {
        public Employee Employee { get; set; }
        public SelectList TrainingSelectList { get; set; }
        public SelectList FileTypeSelectList { get; set; }
        public int trainingId{ get; set; }
        public int fileType { get; set; }

        public ViewFileModel(int employeeId)
        {
            using (var unit = new UnitOfWork())
            {
                Employee = unit.EmployeeRepository.FindBy(e => e.Id == employeeId).SingleOrDefault();
                if (Employee == null)
                {
                    Debug.Print("Employee bulunamadi {0},", employeeId);
                    throw new ArgumentException("Hatali personel parametresi " + employeeId);
                }
                else
                {
                    TrainingSelectList = new SelectList
                       (Employee.TrainingList, "Id", "TrainName");
                    FileTypeSelectList = SelectListUtils.FileTypeSelectList(1);

               }

            }

        }

在我看来,我渲染局部视图并尝试在视图中传递对象。传递的对象将是局部视图中的新模型。

<div id="employee_files">
            @{ Html.RenderPartial("_DetailsFiles", new { ViewBag.fileModel });
        }

在我的部分观点中,我有这个:@model G222.IK.Models.ViewModel.ViewFileModel

我收到以下异常。我认为ViewBag返回Object并且视图期望ViewFileModel存在问题。我试图在我的渲染器视图中将它强制转换为我的模型,但它不起作用。对此有什么解决方法吗?

The model item passed into the dictionary is of type '<>f__AnonymousType0`1[System.Object]', but this dictionary requires a model item of type 'G222.IK.Models.ViewModel.ViewFileModel'.

2 个答案:

答案 0 :(得分:1)

我会尝试

<div id="employee_files">
        @{ Html.RenderPartial("_DetailsFiles", ViewBag.fileModel);
    }

答案 1 :(得分:1)

您正在将新的匿名对象传递给局部视图。

 @{ Html.RenderPartial("_DetailsFiles", new { ViewBag.fileModel });

使用属性fileModel创建一个新对象,该属性具有fileModel对象的值。

您应该使用:

@{ Html.RenderPartial("_DetailsFiles", ViewBag.fileModel);

这样,ViewBag属性的值将正确传递。