RenderView с MVC2 - PullRequest
       14

RenderView с MVC2

0 голосов
/ 10 января 2010

Я использую инфраструктуру MVC preview 2 для разработки веб-сайтов и следую учебным пособиям по MVCStorefront, чтобы лучше понять MVC.

Скажите, почему я не могу использовать метод RenderView ()?

Я что-то упустил или могу вместо этого использовать View ()? В чем разница между этими методами ..

Спасибо

Вот где Роб использует RenderView в своем уроке.

[TestMethod]
    public void CatalogController_IndexMethod_ShouldReturn_Categories_And_Data_For_Parent1() {

        CatalogController c = new CatalogController(_repository);

        RenderViewResult result = (RenderViewResult)c.Index("Parent1", "Sub10");

        CatalogController.CatalogData data = (CatalogController.CatalogData)result.ViewData;

        Assert.IsNotNull(data.Category);
        Assert.IsNotNull(data.SubCategory);
        Assert.IsNotNull(data.SubCategory.Products);
        Assert.IsTrue(data.SubCategory.Products.Count() > 0);

        Assert.IsNotNull(result);
    }

Я не могу использовать RenderView. Он говорит, что «имя RenderView» не существует в текущем контексте

Вот ссылка: http://www.asp.net/learn/mvc-videos/video-357.aspx

Вот метод индекса из класса CatalogController:

public ActionResult Index(string category, string subcategory) {

        //instantiate the service
        CatalogService svc = new CatalogService(_repository);

        //the ViewData class
        CatalogData data = new CatalogData();

        //pull all the categories for the navigation
        data.Categories = svc.GetCategories();

        //pull the category based on subcategory name
        data.Category = data.Categories.WithCategoryName(category);

        //catch for bad data
        if (data.Category == null) {

            data.Category = data.Categories.DefaultCategory();

            data.SubCategory = data.Category.SubCategories[0];

        } else {

            data.SubCategory = data.Categories.WithCategoryName(subcategory);

            //catch for bad SubCategory
            data.SubCategory= data.SubCategory ?? data.Category.SubCategories[0];

        }
        return RenderView("Index",data);
    }

У меня также есть проблема с приведением result.ViewData в типе CatalogData, который является классом, который содержит данные. В нем говорится: не удается преобразовать тип System.Web.Mvc.ViewDataDictionary в Commerce.MVC.Web.Controllers.CatalogController.CatalogData

.

Ответы [ 2 ]

2 голосов
/ 10 января 2010

Видео, которое вы смотрите, к сожалению, устарело - оно из ASP.NET MVC 1.0 Preview 2. С тех пор выпущена версия ASP.NET MVC 1.0 RTM, и доступны предварительные просмотры ASP.NET MVC 2.

В ASP.NET MVC 1.0 Preview 2 и более ранних методах действий возвращалось «void», поэтому им приходилось явно выполнять результат, например, отображать представление:

public void Index() {
    // do some work...
    RenderView("Index");
}

В ASP.NET MVC 1.0 Preview 3 (Обновить?) И новее методы действия возвращают объект результата, который затем фактически выполняет результат:

public ActionResult Index() {
    // do some work...
    return View("Index");
    // or you could also just say "return View();" and MVC figures out the view name
}

Основная причина, по которой это изменилось, заключается в том, что он позволяет значительно улучшить модульное тестирование. Методы действий теперь выполняют только «логику приложения» и не беспокоятся о том, как визуализировать представление. Модульный тест может просто проверить результаты логики приложения, а затем убедиться, что следующим желаемым шагом был «рендеринг представления».

Множество имен типов и имен методов также изменились, чтобы сделать их короче и проще в использовании. Например, RenderView - это просто View, а RenderViewResult - это просто RenderView.

0 голосов
/ 01 июля 2010

Приношу свои извинения, если я воскресил мертвую тему, подобную этой, но у меня были те же проблемы, что и у OP, и я нашел свое решение. Поэтому я бы ответил здесь, если кто-то, кто следит за серией Роба StoreFront, тоже найдет решение.

[TestMethod]
public void CatalogController_IndexMethod_ShouldReturn_Categories_And_Data_For_Parent1() {

    CatalogController c = new CatalogController(_repository);

    ViewResult result = c.Index("Parent1", "Sub10") as ViewResult;

    CatalogController.CatalogData data = result.ViewData.Model as CatalogController.CatalogData;

    Assert.IsNotNull(data.Category);
    Assert.IsNotNull(data.SubCategory);
    Assert.IsNotNull(data.SubCategory.Products);
    Assert.IsTrue(data.SubCategory.Products.Count() > 0);
    Assert.AreEqual("Parent1", data.Category.Name);
    Assert.AreEqual("Sub10", data.SubCategory.Name);

    Assert.IsNotNull(result);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...