将字符串编码为HTML Asp.NET MVC razor

时间:2017-10-16 02:31:26

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

我有这个:

@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片段,我必须打印open div并在行已满时关闭div,实际代码我无法做到,我尝试了另外一些东西(HTMLString,HTML.Raw .. 。)但没有任何作用,你能帮我一把吗?

谢谢!

3 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

我发现您的代码存在一些问题。

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

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

将此代码更改为

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

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

接下来,如果循环以值top结束,您似乎无法在<div>循环后关闭开头for row != 3

您应始终使用View source code或类似内容检查呈现的HTML。我注意到Firefox指示哪些不匹配的标签已被“修复”,即插入了关闭标签等。可能其他浏览器具有类似的功能。

答案 2 :(得分:0)

您可以仅省略 DisplayFor modelItem => ,因此:

@Html.Raw(item.Description)