【问题标题】:Encode string to HTML Asp.NET MVC razor将字符串编码为 HTML Asp.NET MVC razor
【发布时间】:2018-03-27 11:49:23
【问题描述】:

我有这个:

@model IEnumerable<MVPTracker.Models.DashboardResult>
@using MVPTracker.Models;

@{
int row = 0;
ViewBag.Title = "DashboardList";
Layout = "~/Views/Shared/_Layout.cshtml";
string top =  "<div class='row'> ";
string Bot = "</div> ";
}

<div class="wrapper wrapper-content animated fadeInRight">
<div class="row">
    <div class="col-lg-12">
        <div class="ibox float-e-margins">
            <div class="ibox-content">
                <div class="wrapper wrapper-content animated fadeInRight">
                    @{
                        foreach (var item in Model)
                        {
                            if (row == 0)
                            {
                                Html.Encode(top);     
                            }
                            <div class="col-md-3">
                                <div class="ibox">
                                    <div class="ibox-content product-box">
                                        <div class="product-imitation">
                                            <img src="~/Images/App/EventHeader.jpg" width="100%" />
                                        </div>
                                        <div class="product-desc">
                                            <span class="product-price">
                                                @Html.DisplayFor(modelItem => item.Sport.Name)
                                            </span>
                                            <a href="@Url.Action("ViewResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="product-name"> @Html.DisplayFor(modelItem => item.EventName)</a>
                                            <div class="small m-t-xs">
                                                <strong>Desc:</strong> @Html.DisplayFor(modelItem => item.Description) <br />
                                                <strong>Date:</strong> @Html.DisplayFor(modelItem => item.EventDate)
                                            </div>
                                            <br />
                                            <div class="m-t text-righ">
                                                <a href="@Url.Action("UploadResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="btn btn-xs btn-outline btn-primary">Upload Results <i class="fa fa-long-arrow-right"></i> </a>
                                                <a href="@Url.Action("ViewResults", "Results", new { key = Functions.encrypt(item.DashboardResultID.ToString()) })" class="btn btn-xs btn-outline btn-primary">View Results <i class="fa fa-long-arrow-right"></i> </a>
                                            </div>
                                        </div>
                                    </div>
                                </div>
                            </div>
                            if (row == 3)
                            {
                                Html.Encode(Bot);
                                row = 0;
                            }
                            else
                            {
                                row++;
                            }


                        }
                    }


                </div>
            </div>
        </div>
    </div>
</div>

我有 2 个具有 div sn-p 的变量,当行已满时,我必须打印打开的 div 和关闭 div,而实际代码我做不到,我尝试了另一种东西(HTMLString,HTML.Raw ...) 但没有任何效果,您能帮我解决这个问题吗?

谢谢!

【问题讨论】:

  • 你想做什么?你试过什么? (这无济于事“我尝试其他东西(HTMLString,HTML.Raw ...)坚果没有任何作用”))
  • 在代码的顶部我有这个: string top = "
    ";和字符串 Bot = "
    ";我如何将其转换为 HTML,我尝试使用 HTML.Raw(top) 和 HTML.Encode(Top) 但没有@Shyju
  • 您想按原样打印还是将该 HTML 呈现到页面中?
  • 我想将该 HTML 呈现到页面中。
  • 这是哪个 .net 版本? .net 核心?还是别的什么?

标签: html asp.net asp.net-mvc razor


【解决方案1】:

顾名思义,Html.Encode 方法将对输入进行编码。如果您尝试将变量中的 HTML 呈现为页面的 HTML,您可以使用 Html.Raw 方法。

Html.Raw 方法不进行 html 编码。因此,请确保您将安全的 HTML 传递到此页面,以防止可能的脚本注入。

<div class="wrapper wrapper-content animated fadeInRight">
@foreach (var item in Model)
{
  if (row == 0)
  {
    @Html.Raw(top);     
  }
  <div>some html</div>
  if (row == 0)
  {
     @Html.Raw(Bot);
  }
  row++;
}
</div>

【讨论】:

  • 我尝试使用 HTML.Raw 并不起作用.. sn-p 未呈现。
  • 谢谢!我的错误是我错过了 HTML.Raw 开头的“@”
【解决方案2】:

我注意到您的代码存在一些问题。

                        if (row == 0)
                        {
                            Html.Encode(top);     
                        }

您不会在 C# 和标记模式之间切换,因此(错误调用)Html.Encode() 的结果会丢失。

将此代码更改为

                        if (row == 0)
                        {
                            <text>@Html.Raw(top)</text>
                        }

if (row == 3)开头的代码也是如此。

接下来,如果循环以 row != 3 的值结束,您似乎不会在 for 循环之后关闭开口 top &lt;div&gt;

您应该始终使用 View source code 或类似名称检查呈现的 HTML。我注意到 Firefox 指出不匹配的标签已被“修复”,即插入的结束标签等。可能其他浏览器具有类似的功能。

【讨论】:

    【解决方案3】:

    您可以同时省略 DisplayFormodelItem =>,因此:

    @Html.Raw(item.Description)
    

    【讨论】:

      猜你喜欢
      • 2012-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-09
      • 2014-10-26
      • 2017-06-12
      • 1970-01-01
      • 2011-11-23
      相关资源
      最近更新 更多