Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# AllowTM不工作_C#_Asp.net Mvc 4 - Fatal编程技术网

C# AllowTM不工作

C# AllowTM不工作,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我正在建立一个内容管理系统,允许我以外的人更新网站上的内容 我有一个面向前端的HTML表单,它通过AJAX将数据发送到控制器: // CONTROLLER [ValidateInput(false)] public void CarAJAX() { CarAdmin CA = new CarAdmin(); CA.UpdateCar(System.Web.HttpContext.Current.Request); } 此数据将包含HTML,因此我的模型中不断出现错误: // M

我正在建立一个内容管理系统,允许我以外的人更新网站上的内容

我有一个面向前端的HTML表单,它通过AJAX将数据发送到控制器:

// CONTROLLER
[ValidateInput(false)]
public void CarAJAX()
{
    CarAdmin CA = new CarAdmin();
    CA.UpdateCar(System.Web.HttpContext.Current.Request);
}
此数据将包含HTML,因此我的模型中不断出现错误:

// MODEL
using System;
using System.Web;
using System.Web.Mvc;

namespace Site.Models
{
    public class CarAdmin
    {
        public String id { get; set; }
        [AllowHtml]
        public String HTML_Stuff { get; set; }

        public CarAdmin(){}

        public void UpdateCar(HttpRequest Request)
        {
            HTML_Stuff = Request.Form["HTML_Stuff"]; // <-- ERROR HAPPENS HERE!!!!!!

            // sanitation and validation

            String Select = String.Format("UPDATE Car Set HTML_Stuff = {0} WHERE id = {1}", HTML_Stuff, id);

            // Execute DB Command
        }
    }
}
//模型
使用制度;
使用System.Web;
使用System.Web.Mvc;
名称空间站点.Models
{
公营车
{
公共字符串id{get;set;}
[allowtml]
公共字符串HTML_Stuff{get;set;}
公共CarAdmin(){}
public void UpdateCar(HttpRequest请求)
{
HTML_Stuff=Request.Form[“HTML_Stuff”];//您应该按照-

使用所需的实体创建一个单独的类-

public class EntityDto {
        public String id { get; set; }
        [AllowHtml]
        public String HTML_Stuff { get; set; }
}
然后在控制器方法中使用它-

[ValidateInput(false)]
public void UpdateCar(EntityDto model)
{
    var html_stuff = model.HTML_Stuff; 

    // sanitation and validation

    String Select = String.Format("UPDATE Car Set HTML_Stuff = {0} WHERE id = {1}", html_stuff , id);

    // Execute DB Command
}
如果有帮助,请告诉我。

尝试以下方法:

// CONTROLLER
[HttpPost]
public ActionResult CarAJAX(CarAdmin model)
{
    model.UpdateCar();
}

// MODEL
using System;
using System.Web;
using System.Web.Mvc;

namespace Site.Models
{
    public class CarAdmin
    {
        private string html;

        public String id { get; set; }
        [AllowHtml]
        public String HTML_Stuff { 
            get
            { 
                return html; 
            }
            set
            { 
                // sanitation and validation on "value"
                html = value;
            }
        }

        public CarAdmin(){}

        public void UpdateCar()
        {
            String Select = String.Format("UPDATE Car Set HTML_Stuff = {0} WHERE id = {1}", HTML_Stuff, id);

            // Execute DB Command
        }
    }
}
我还注意到您正在验证一个方法。如果您在设置属性时这样做,可能会更好

编辑:

我在这个主题上做了很多研究。你实际上需要使用AJAX将模型绑定到控制器。请看这个。我不确定你的代码的范围,但我认为你也需要
ActionResult
在控制器内返回。这是从
ActionResult
返回内容的好例子。我也有同样的问题。g> “requestValidationMode=“2.0”“已在web.config中设置,[AllowHtml]也已在适当的属性上设置,我仍然收到错误“检测到潜在危险的请求。表单值…”

但我观察到控制器方法实际上被调用(我能够调试该方法),因此这意味着验证实际上已关闭。在调用堆栈中,我注意到缓存周围反复出现类,如“System.Web.Caching.OutputCacheModule”这让我想到这与缓存有关我关闭了整个控制器,就像这样“[OutputCache(NoStore=true,Duration=0)]”


基于此,我还尝试将缓存的位置设置为OutputCacheLocation。无,这就成功了。因此,我最终得到了[OutputCache(NoStore=true,Duration=0,Location=OutputCacheLocation.None)]正在工作,最后没有验证我的请求,也没有使我的请求失败只需输入[ValidateInput(false)]在控制器上

“不工作”,“我收到一个错误”:请更具体一点。你收到的错误可能重复?@ken2k我添加了错误:一个潜在危险的请求。检测到表单值。你必须在控制器内创建模型对象,并从请求中设置信息,因此从UpdateCar()中删除请求方法参数。然后根据set属性清理输入并将其推送到数据库。如何通过AJAX将模型发送到控制器?该方法将位于何处。我认为没有必要将模型传递给该方法。@TravisHeeter,您不需要!它需要表单元素的名称必须与该模型匹配。添加OutputCache属性控制器也对我有效,相当奇怪不知道为什么会有效,但它对我有效-谢谢!很棒的斯科特!太奇怪了。再加上我的1杯啤酒。(让我们开始一个新的stackexchange fork,名为BeerExchange。将啤酒作为解决方案。可能是一个巨大的赢家。)这在没有“requestValidationMode=”2.0的情况下有效…很好地解决了这个问题:)