Asp.net mvc MVC预览5-ViewData/HTML帮助程序怪癖

Asp.net mvc MVC预览5-ViewData/HTML帮助程序怪癖,asp.net-mvc,viewdata,Asp.net Mvc,Viewdata,以下代码位于/Courses/Detail操作中: [AcceptVerbs("GET")] public ActionResult Detail(int id) { ViewData["Title"] = "A View Title"; return View(tmdc.GetCourseById(id)); } tmdc.GetCourseById(id)方法为视图返回类型为Course的实例。在我使用的视图中 <%=

以下代码位于
/Courses/Detail
操作中:

    [AcceptVerbs("GET")]
    public ActionResult Detail(int id)
    {
        ViewData["Title"] = "A View Title";
        return View(tmdc.GetCourseById(id));
    }
tmdc.GetCourseById(id)
方法为视图返回类型为
Course
的实例。在我使用的视图中

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

显示
课程
对象的
标题
属性的值。相反,文本框显示字符串
视图标题
。这是正常的/预期的行为吗?处理这个问题的最佳方法是什么

更新

作为一种解决方法,我已将
ViewData[“Title”]
更改为
ViewData[“VIEW\u Title”]
,但我希望有一种更干净的方法来处理此冲突,或者知道这是否是预期的结果。

不幸的是,我现在不在我的开发机器上,因此无法测试,但您尝试过类似的方法吗

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

是的,这种行为符合设计要求。这样做的目的是,您应该能够显示(在视图中)无效的用户输入,而这些用户输入实际上永远不会被指定为模型类型实例的属性。您可以在中阅读有关此功能的更多信息

您的解决方法很好,但它确实突出了视图命名空间拥挤的问题。请记住,除了模型和ViewData的属性外,还有TempData、ModelState和HTML内容


如果您总是想显示模型属性“Title”,那么您可能需要使用一个HTML.TextBox重载,它接受文本值而不是属性名。

感谢Craig的帮助……我忘记了与TempData和其他属性可能存在的冲突。