1

以下代码在/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")%>

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

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

4

2 回答 2

1

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

<%= Html.TextBox("Title", ViewData.Model.Title) %>
于 2008-09-22T16:56:32.687 回答
1

是的,这种行为是按设计的。目的是您应该能够显示(在您的视图中)无效的用户输入,这些输入实际上永远不会被分配为模型类型实例的属性。您可以在此博客文章中阅读有关此功能的更多信息。

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

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

于 2008-09-22T17:02:01.970 回答