asp.net 如何绑定包含HTML标记的字符串?C#

hi3rlvi2  于 2023-11-20  发布在  .NET
关注(0)|答案(1)|浏览(107)

我有一个表格,上面有一些复选框类型的问题。问题的措辞是从数据库中的一个表中获取的。但是其中有HTML标记。
| ID {PK}|问题|
| --|--|
| 1 |第一个月|
| 2 |Another question with <br> HTML markup的|
我可以毫不费力地呈现这些问题,尽管它们有HTML标记。问题发生在用户提交表单时。

@using (Html.BeginForm("SaveQuestion", "QuestionController", FormMethod.Post))
    {
@for (int i = 0; i < Model.QuestionList.Count; i++)
{
    @Html.HiddenFor(m => Model.QuestionList[i].ID)
    @Html.HiddenFor(m => Model.QuestionList[i].Question)

    <div>
        @Html.CheckBoxFor(m => Model.QuestionList[i].IsDisplay)
        @Html.DisplayFor(m => Model.QuestionList[i].Question)
    </div>
}
<button type="submit">Save</button>
}

字符串
提交表单时,我得到以下错误。
System.Web.HttpRequestValidationException(0x 80004005):从客户端检测到有潜在危险的请求。
这个要求迫使我保存这些字符串中的标记。那么我如何避免这个错误呢?有没有一种方法可以用Unicode实现同样的效果呢?

eoxn13cs

eoxn13cs1#

你可以在模型类的Question属性上使用AllowHtml属性。类似于(?我猜有一点):

public class Question
{
    public int ID { get; set; }
    
    [AllowHtml]
    public string Question { get; set; }

字符串
您还可以在P2P控制器中的SaveQuestion方法(Action)上使用ValidateInput(false)属性,尽管这将关闭对所有字段的所有检查。
您应该知道这些检查是为了防止跨站脚本攻击(XSS)。如果您的网站是面向公众的(即使不是),您需要非常小心,如果您关闭它们,有人恶意无法输入一些东西,如脚本标记内的某些JavaScript,将以某种方式执行并造成损害。
网站上的previous answer中有关于这些方法和XSS的讨论。

相关问题