如何将参数传递给局部视图:对象引用未设置为对象的实例

How to pass Parameter to a partial view: Object reference not set to an instance of an object

我有一个在页面上呈现一个控件的局部视图,该控件用于 long 的某些字段。我是这样定义的:

@model long
@(Html.Kendo().MultiSelectFor(x => Model)

我正在尝试在其他视图中使用以下内容呈现此部分视图:

@Html.Partial("MultiSelect/partialView", @Model.longField)

这给了我一个 Object reference not set to an instance of an object 例外。

请指导我实现此目的的正确语法。

我能想到这里有两件事是错误的,尽管这取决于您的解决方案。

  1. 检查部分视图名称的路径。如果 MultiSelect 文件夹和 partialView.cshtml 与您调用 Html.Partial(...) 的视图位于同一文件夹中,则只能写入 MultiSelect/partialView。也就是说,你的文件夹结构是这样的:

    Views
     | YourViewFolder
         YourView.cshtml
         | MultiSelect folder
            partialView.cshtml
    

换句话说,在您的代码中,您指定了当前视图的相对路径。 (请注意,您的部分视图也可以在 /Views/Shared 中,Razor 也会在这种情况下找到它。)如果您的 fodler 结构不是上面那样(或不在 /Views/Shared/ 中,那么您必须像这样指定相对于您的项目的路径:/Views/.../MultiSelect/partialView 其中 ...ViewsMultiSelect 之间的任何目录。

您应该检查的另一件事是 @(Html.Kendo().MultiSelectFor(x => Model) 行的末尾缺少右括号 ),我不确定这是复制粘贴错误还是在你看来就是这样。

检查 @Model 是否为 null。如果是,请尝试创建模型的对象以传递给视图。您无法像之前那样访问空对象的 属性。

 var model= new YourViewModel();
 return View(model);