MVC Preview 5-ViewData / HTML Helper Quirk

时间:2020-03-06 14:32:42  来源:igfitidea点击:

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

显示"课程"对象的"标题"属性的值。而是在文本框中显示字符串" A View Title"。这是正常/预期的行为吗?处理此问题的最佳方法是什么?

更新
解决方法是,将" ViewData [" Title"]更改为ViewData [" VIEW_TITLE"]`,但希望使用一种更干净的方法来处理此冲突或者知道这是否是预期结果。

解决方案

不幸的是我现在不在我的开发机器上,所以我无法测试它,但是我们尝试过类似的东西吗?

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

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

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

如果始终要显示模型属性"标题",则可能要使用HTML.TextBox重载之一,该重载接受文字值而不是属性名称。