Представление не найдено, если указана модель представления - PullRequest
0 голосов
/ 17 января 2012

У меня есть особая проблема с частичным представлением и моделью связанного представления. Вот как выглядит соответствующая функция в контроллере:

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 Ответ

1 голос
/ 17 января 2012

Попробуйте заменить:

@inherits WebViewPage<MyProject.ViewModels.MyModel>

на:

@model MyProject.ViewModels.MyModel

в верхней части ShowMyView.cshtml представления.Обычно два должны быть эквивалентны, но вы никогда не знаете.Также убедитесь, что при рендеринге этого дочернего действия вы передаете параметр id:

@Html.Action("ShowMyView", "SomeController", new { id = "123" })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...