ASP.NET MVC: передача переменных экземпляра в представление, как в Ruby - PullRequest
2 голосов
/ 24 августа 2010

Да, я знаю, что в ASP.NET MVC вы должны использовать ViewModels. Но я устал писать бесчисленное количество классов ViewModel. Кроме того, я хотел бы просто передать модель Валидации в представление, вместо этого я должен передать всю ViewModel, поэтому я получаю уродливый код, такой как

Html.TextBoxFor(m => m.TopicModel.Title)

Вместо

Html.TextBoxFor(m => m.Title)

Мне очень нравится RoR's @instance_variables, где вы просто передаете все необходимые переменные, не создавая для этого новых классов.

Как я могу это сделать? Я думаю, что это невозможно, потому что я попробовал все, даже функцию C # 4 dynamic.

Есть идеи?

Ответы [ 2 ]

3 голосов
/ 24 августа 2010

Вы можете использовать словарь ViewData:

public ActionResult DoSomething()
{
    ViewData["Message"] = "Hello World";
    return View();
}

Доступно как:

<%= ViewData["Message"] %>

Вы также можете переключиться на использование динамического:

<%@ Page Inherits="ViewPage<dynamic>" %>

Я думаю,это должно позволить вам сделать:

public ActionResult DoSomething()
{
    return View(new { Message = "Hello" });
}

Доступно как:

<%= Model.Message %>

Поскольку динамика разрешается во время выполнения, а не во время компиляции, это должно позволить вам выбросить анонимный объект ввид.

0 голосов
/ 24 августа 2010

Если вам не нравится использование моделей представлений, вы можете сами передавать модели доменов.Почему нет?

<%@ Page Inherits="ViewPage<TopicModel>" %>

Html.TextBoxFor(m => m.Title)
...