2008-09-22 4 views
1

Следующий код в /Courses/Detail действия:MVC Preview 5 - ViewData/HTML Helper Куирк

[AcceptVerbs("GET")] 
    public ActionResult Detail(int id) 
    { 
     ViewData["Title"] = "A View Title"; 
     return View(tmdc.GetCourseById(id)); 
    } 

Метод tmdc.GetCourseById(id) возвращает экземпляр типа Course для просмотра. В представлении я использую

<%= HTML.TextBox("Title")%> 

, чтобы отобразить значение Title свойства для Course объекта. Вместо этого текстовое поле отображает строку A View Title. Это нормальное/ожидаемое поведение? Какой был бы лучший способ справиться с этим?

Update
В качестве обходного пути, я изменил ViewData["Title"] к ViewData["VIEW_TITLE"], но хотелось бы более чистый способ обработки этого столкновения или узнать, является ли это ожидаемый результат.

ответ

1

К сожалению, я сейчас не на своем dev-машине, поэтому я не могу это проверить, но вы пробовали что-то подобное?

<%= Html.TextBox("Title", ViewData.Model.Title) %> 
1

Да, это поведение по-своему. Предполагается, что вы должны иметь возможность отображать (по вашему мнению) неверный ввод пользователя, который никогда не может быть назначен как свойство экземпляра вашего типа модели. Подробнее об этой функции вы можете узнать в this blog post.

Ваше обходное решение в порядке, но оно подчеркивает проблему пространства с переполненным представлением. Имейте в виду, что помимо свойств вашей модели и ViewData есть также файлы TempData, ModelState и HTML.

Если вы всегда хотите отобразить свойство модели «Заголовок», тогда вы можете использовать одну из перегрузок HTML.TextBox, которая принимает буквальное значение вместо имени свойства.

+0

Спасибо за помощь Крейг ... Я забыл о возможных конфликтах с TempData и другими. – mwilkes 2008-09-22 17:09:04