以下代码位于/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"]
,但希望有更简洁的方法来处理此冲突或知道这是否是预期的结果。
答案 0 :(得分:1)
不幸的是我现在不在我的开发机器上所以我无法测试这个,但你尝试过这样的事情吗?
<%= Html.TextBox("Title", ViewData.Model.Title) %>
答案 1 :(得分:1)
是的,这种行为是按照设计的。目的是您应该能够显示(在您的视图中)无效的用户输入,该输入实际上永远不会被指定为模型类型实例的属性。您可以在this blog post中了解有关此功能的更多信息。
您的解决方法很好,但它确实突出了拥塞视图命名空间的问题。请记住,除了模型和ViewData的属性之外,还有TempData,ModelState和HTML内容。
如果您总是希望显示模型属性“Title”,那么您可能希望使用HTML.TextBox重载之一,该重载接受文字值而不是属性名称。