指定视图模型时未找到视图

时间:2012-01-17 19:02:37

标签: asp.net asp.net-mvc asp.net-mvc-3

我对部分视图和相关视图模型有一个特殊的问题。 这就是控制器中的相关功能:

using MyProject.ViewModels;

[ChildActionOnly]
public PartialViewResult ShowMyView(int id)
{
  return PartialView(new MyModel() { ModelID = id });
}

然后我有一个定义如下的视图模型:

namespace MyProject.ViewModels
{
  [Bind(Exclude = "ModelID")]
  public class MyModel: IValidatableObject
  {
    public MyModel()
    {
        Count = 1;
    }

    [Required]
    [HiddenInput(DisplayValue = false)]
    public int ModelID { get; set; }

    [Required]
    [Range(1, 9999)]
    public int Count { get; set; }

    public IEnumerable<ValidationResult> Validate(
                  ValidationContext validationContext)
    {
        if (ModelID <= 0)
            yield return new ValidationResult("Model ID missing", 
                                          new[] { "ModelID" });

        if (Count <= 0)
            yield return new ValidationResult("Count cannot be zero", 
                                          new[] { "Count" });
    }
  }
}

我在Views / Shared中定义了一个名为ShowMyView.cshtml的视图。 奇怪的是,当我将其定义为

@inherits WebViewPage

它工作正常(显示视图),但是当我定义实际模型时

@inherits WebViewPage<MyProject.ViewModels.MyModel>

它不会显示视图并向我提供无法找到视图的错误(包含它查找的位置列表,包括确实存在的Views / Shared / ShowMyView.cshtml路径)。

这似乎适用于我在项目中使用的任何模型类。关于我在这里做错了什么的线索?

1 个答案:

答案 0 :(得分:1)

尝试更换:

@inherits WebViewPage<MyProject.ViewModels.MyModel>

使用:

@model MyProject.ViewModels.MyModel

位于ShowMyView.cshtml视图的顶部。通常这两个应该是等价的,但你永远不会知道。还要确保在渲染此子操作时传递id参数:

@Html.Action("ShowMyView", "SomeController", new { id = "123" })