【问题标题】:what is the equivalent of the "literal" tag in asp.net mvc什么是asp.net mvc中的“文字”标签的等价物
【发布时间】: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


    【解决方案1】:

    相当于是不要做出与原始开发人员相同的错误设计选择。

    但是,由于我们生活在现实世界中,您需要将它们的 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>
    

    【讨论】:

    • 感谢您的回复。您能否提供一种替代方法,我可以将其重构为?
    • 本质上是一样的,除了不是在OldCode.GethtmlICantBelieveIt中将你的html连接在一起,而是在你的控制器中收集构成该html内容的数据,将它放在模型中,然后使用模型的内容在视图中呈现所有 html。花几分钟研究 MVC,你就会掌握它的窍门。
    【解决方案2】:

    我遇到了同样的问题。不要打扰 MyPageModel,只要坚持 ViewData 但使用 equals 而不是冒号。

    <%= ViewData("SomeVarName") %>
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 Razor,如果不使用强类型帮助器,您将执行以下操作

      @Model.YourVarName
      

      如果您正在使用强类型视图模型,则可以使用 ValueFor() 帮助器

      @Html.ValueFor(m => m.YourVarName)
      

      如果您只有一些文字,您可以将它们放在 ViewData 中,但如果您遵循真正的 MVC 模型,您应该为具有相应属性的视图创建一个模型。考虑到您是从现有的 ASP.NET 页面移植,为每个新视图/页面设置新模型可能会带来很多开销,在这种情况下,请将其保留在 ViewData 中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-26
        • 2017-07-24
        • 2018-08-30
        相关资源
        最近更新 更多