在表单提交的表单字段中发送HTML标记

时间:2011-04-13 10:36:38

标签: c# asp.net-mvc entity-framework html-helper form-submit

我试图将表单提交给我的控制器操作,其中一个表单字段包含HTML标记,例如<p> <ul>

我添加了

<httpRuntime requestValidationMode="2.0"/>

<pages validateRequest="false" </pages>

在我的web.config中,也是

我添加了

[ValidateInput(false)]到我的控制器操作

但当我在description字段包含HTML标记时提交表单时,它会出现以下错误:

A potentially dangerous Request.Form value was detected from the client (desc="<ul><li>Comments: Th...").

我应该/我能做什么,提前谢谢...

我正在使用VS 2010,MVC,实体框架

修改

这是视图侧代码

 <% using (Html.BeginForm("UpdateProductVariant", "home", new { Id = Model.productVariant.ProductVariantId }, FormMethod.Post))
      {%>
    <table>

            <tr>
                <td>Name:</td>
                <td><%: Html.TextArea("ProductVariantName", Model.product.Name)%></td>
            </tr>

            <tr>
                <td>Description:</td>
                <td><%= Html.TextArea("desc",Model.productVariant.Description)%></td>
            </tr>

控制器端

 [ValidateInput(false)]
        public ActionResult UpdateProductVariant(int id, FormCollection collection, bool pub, bool del, decimal hprice)
        {

1 个答案:

答案 0 :(得分:3)

以下内容应该有效:

型号:

public class MyViewModel
{
    public string Description { get; set; }
}

控制器:

public class HomeController: Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel
        {
            Description = "<p>Hello</p>"
        };
        return View(model);
    }

    [ValidateInput(false)]
    [HttpPost]
    public ActionResult UpdateProductVariant(MyViewModel model)
    {
        ...
    }
}

查看:

<% using (Html.BeginForm("UpdateProductVariant", "home", new { Id = Model.productVariant.ProductVariantId }, FormMethod.Post)) { %>
    <%= Html.TextAreaFor(x => x.Description) %>
    <input type="submit" value="OK" />
<% } %>

如果您运行的是ASP.NET 4.0,则只需将<httpRuntime requestValidationMode="2.0"/>添加到web.config中。您也不需要添加<pages validateRequest="false" />

如果这不起作用,您可能无法使用[ValidateInput(false)]属性修饰正确的控制器操作。这应该是您将表单发布到的操作。