从控制器传递Html字符串到视图ASP.Net MVC

27

在MVC中,将Html字符串块从控制器传递到视图的最佳方式是什么? 我希望它在页面加载时显示该html块。谢谢。可以是任何Html,例如:

<table style="width:300px">
<tr>
  <td>Jill</td>
  <td>Smith</td> 
  <td>50</td>
</tr>
<tr>
  <td>Eve</td>
  <td>Jackson</td> 
  <td>94</td>
</tr>
</table>

我希望能将这个字符串从控制器传递给视图,在视图中以HTML格式显示。

谢谢


可能是ASP.NET MVC从控制器传递原始HTML到视图的重复问题。 - Satpal
5个回答

61

在您的控制器操作中:

ViewBag.HtmlStr = "<table style=\"width:300px\"><tr><td>Jill</td><td>Smith</td> <td>50</td></tr><tr><td>Eve</td><td>Jackson</td><td>94</td></tr></table>";

你的观点:

@Html.Raw(ViewBag.HtmlStr)

简单的解决方案是最好的。 - Uğur Aldanmaz
也帮助了我,太棒了。 - Pranesh Janarthanan
2
小心使用 Html.Raw(),因为黑客可能会利用这个作为潜在的漏洞点... - Serj Sagan

7
您可以将Controller中的html分配给ViewBag,并在View中访问ViewBag以获取该html值。
ViewBag.YourHTML = htmlString;

查看

<div> @ViewBag.YourHTML </div>

最好不要将html从controller传递到View,而是将对象或对象集合传递到View(强类型视图),并在View中呈现html,因为这是View的责任。
控制器
public ActionResult YourView()
{
    //YourCode
    return View(entities.yourCollection.ToList());
}

查看

<table style="width:300px">
    foreach (var yourObject in Model)
    {
       <tr>
             <td>@yourObject.FirstName</td>
             <td>@yourObject.LasttName</td> 
             <td>@yourObject.Amount</td>
       </tr>      
    }

</table>

我该如何在视图中显示它? - Pratik Bhoir
很好的回答,Adil。但是我真的不喜欢在控制器中创建HTML的做法。这就是视图存在的原因 :) - Sandman
这要看情况,最好使用强类型视图。 - Adil
@Sandman 你说得没错,但有时候你会被卡住,无能为力。 - Pratik Bhoir
@Pratik 我感同身受 :) - Sandman
显示剩余2条评论

2

最佳方法是创建一个部分视图,并在某个容器 div 中将其返回的 html 追加到父视图中。

在您的主视图中,可以如下操作:

<div>

    @{

    Html.RenderAction("youraction","yourcontroller")

     }

</div>

在你的操作中执行以下步骤:
public ActionResult youraction()
{
 return View();
}

以及您的局部视图:

@{
Layout = null;
}

<table style="width:300px">
<tr>
  <td>Jill</td>
  <td>Smith</td> 
  <td>50</td>
</tr>
<tr>
  <td>Eve</td>
  <td>Jackson</td> 
  <td>94</td>
</tr>
</table>

我的HTML将是动态的,无法创建固定的部分视图。 - Pratik Bhoir
你可以在局部视图中创建动态HTML。 - Ehsan Sajjad

1

您可以使用ViewBag.YourFieldViewData["YourStringName"]在视图中检索它。只需将其放置在想要的位置,前面加上@,例如:@ViewBag.YourField@ViewData["YourStringName"]


1
控制器
 ViewBag.HTMLData = HttpUtility.HtmlEncode(htmlString);  

查看

@HttpUtility.HtmlEncode(ViewBag.HTMLData)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接