Получение пользовательского типа из TempData asp.net mvc 2 - PullRequest
0 голосов
/ 07 февраля 2011

У меня есть собственный класс MyCustomType. В этом классе у меня есть свойство MyCustomProperty типа bool и другое свойство MyCustomProperty1 типа bool.

Мне нужно проверить, истинно ли MyCustomProperty в моем представлении. Я делаю следующее:

<%if ( TempData[ViewDataConstants.MyCustomTypeKey] != null && ((MyCustomType)TempData[ViewDataConstants.MyCustomTypeKey]).MyCustomProperty %>show some custom content.

Но по какой-то причине, когда я m running it I see error message that MyCustomTYpe could not be found are you missing an assembly reference bla-bla-bla. MyCustomType is in my controller it публично и для проверки я даже добавил ссылку на представление. Но все время говорят, что класса MyCustomType нет. Что я делаю не так?

Интересно, почему-то, когда я переместил его в Common из пространства имен Controllers, он неожиданно заработал. До сих пор не понимаю, почему он не работает в пространстве имен контроллеров. Оба пространства имен были явно включены в представление.

1 Ответ

1 голос
/ 07 февраля 2011

Понятия не имею, почему это не сработало, но, честно говоря, иметь весь этот код в представлении для меня неправильноМожет быть, это так же, как я, Visual Studio не любит писать код C # в представлении :-).

Это должно быть свойство в вашей модели представления:

public class MyViewModel
{
    public bool MyCustomProperty { get; set; }
}

и внутри вашего контроллера:

public ActionResult Foo()
{
    var model = TempData[ViewDataConstants.MyCustomTypeKey] as MyCustomType ?? new MyCustomType();
    var viewModel = Mapper.Map<MyCustomType, MyViewModel>(model);
    return View(viewModel);
}

и, наконец, внутри вашего представления:

<% if (Model.MyCustomProperty) { %>
    show some custom content.
<% } %>

Теперь вы больше не нуждаетесь в использовании, кастингах ... в представлении.

...