【发布时间】:2013-02-11 09:42:00
【问题描述】:
我正在将一个网站从 asp.net 迁移到 asp.net mvc
在asp.net站点中有很多地方都有“文字”标签,服务器会生成一堆html并粘贴在文字标签中。
在 asp.net mvc 中 doign this 的等价物是什么。我应该把它推到 ViewData 中吗?
【问题讨论】:
标签: asp.net asp.net-mvc
我正在将一个网站从 asp.net 迁移到 asp.net mvc
在asp.net站点中有很多地方都有“文字”标签,服务器会生成一堆html并粘贴在文字标签中。
在 asp.net mvc 中 doign this 的等价物是什么。我应该把它推到 ViewData 中吗?
【问题讨论】:
标签: asp.net asp.net-mvc
相当于是不要做出与原始开发人员相同的错误设计选择。
但是,由于我们生活在现实世界中,您需要将它们的 strings-which-contain-html 推送到特定页面的表示模型中,然后将其写入响应流。
在您的模型中:
public class MyPageModel
{
public string HolyCrapItsHtml {get;set;}
}
在您的控制器中:
public ActionResult MyPage()
{
return View(new MyPageModel
{HolyCrapItsHtml = OldCode.GetHtmlICantBelieveIt()});
}
在你的页面中:
<div>
In the olden days, we'd concatenate our webpages together from strings like:
<%= Model.HolyCrapItsHtml %>
</div>
【讨论】:
我遇到了同样的问题。不要打扰 MyPageModel,只要坚持 ViewData 但使用 equals 而不是冒号。
<%= ViewData("SomeVarName") %>
【讨论】:
如果您使用的是 Razor,如果不使用强类型帮助器,您将执行以下操作
@Model.YourVarName
如果您正在使用强类型视图模型,则可以使用 ValueFor() 帮助器
@Html.ValueFor(m => m.YourVarName)
如果您只有一些文字,您可以将它们放在 ViewData 中,但如果您遵循真正的 MVC 模型,您应该为具有相应属性的视图创建一个模型。考虑到您是从现有的 ASP.NET 页面移植,为每个新视图/页面设置新模型可能会带来很多开销,在这种情况下,请将其保留在 ViewData 中。
【讨论】: