MVC预览5 - ViewData / HTML Helper Quirk

时间:2008-09-22 15:22:27

标签: 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)方法为View返回类型Course的实例。在我正在使用的视图中

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

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

更新
作为一种解决方法,我已将ViewData["Title"]更改为ViewData["VIEW_TITLE"],但希望有更简洁的方法来处理此冲突或知道这是否是预期的结果。

2 个答案:

答案 0 :(得分:1)

不幸的是我现在不在我的开发机器上所以我无法测试这个,但你尝试过这样的事情吗?

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

答案 1 :(得分:1)

是的,这种行为是按照设计的。目的是您应该能够显示(在您的视图中)无效的用户输入,该输入实际上永远不会被指定为模型类型实例的属性。您可以在this blog post中了解有关此功能的更多信息。

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

如果您总是希望显示模型属性“Title”,那么您可能希望使用HTML.TextBox重载之一,该重载接受文字值而不是属性名称。