【问题标题】:ViewBag property changed to object typeViewBag 属性更改为对象类型
【发布时间】:2013-06-10 11:41:21
【问题描述】:

在我的控制器中,我将模型对象放入 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'.

【问题讨论】:

  • 我会创建一个强类型视图,而不是为此使用 ViewBag。

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


【解决方案1】:

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

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

创建一个新对象,其属性 fileModel 具有您的 fileModel 对象的值。

你应该使用:

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

这样才能正确传递 ViewBag 属性的值。

【讨论】:

  • 这给出了错误:错误 2 'System.Web.Mvc.HtmlHelper' 没有名为 'RenderPartial' 的适用方法,但似乎有该名称的扩展方法.扩展方法不能动态调度。考虑强制转换动态参数或在没有扩展方法语法的情况下调用扩展方法。
  • @{ Html.RenderPartial("_DetailsFiles", ViewBag.fileModel as G222.IK.Models.ViewModel.ViewFileModel); 因为 Viewbag 是动态的,您需要在将对象传递给方法之前将其转换为适当的类型。
  • 小心转换,因为上述语法(as)如果不能转换属性,可能会产生空值。
  • 这可能是我现在得到 objectdisposedexception 的原因吗?
  • 没有。当您在处置后尝试使用您的财产时,可能会发生这种情况。我会怀疑属性是 TrainingSelectList 或 FileTypeSelectList。
【解决方案2】:

我会试试的

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

【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-31
    • 2022-01-17
    相关资源
    最近更新 更多