Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 动态HTML内容-“;潜在危险的请求。从客户端检测到表单值;_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 3 - Fatal编程技术网

C# 动态HTML内容-“;潜在危险的请求。从客户端检测到表单值;

C# 动态HTML内容-“;潜在危险的请求。从客户端检测到表单值;,c#,asp.net,asp.net-mvc,asp.net-mvc-3,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,我正在使用MVC3和Razor 我有一个页面,您可以在其中创建供应商。在前端,一个供应商的页面有三个内容:一个名称、一个描述(HTML)和多个包含HTML的选项卡。我的客户希望选项卡是动态的,他们希望在添加供应商时能够添加/编辑/删除选项卡和内容 下面是我的数据库设计: Vendors ------------------- VendorID (PK) Name Description VendorTabs ------------------- VendorTabID (PK) Vendor

我正在使用MVC3和Razor

我有一个页面,您可以在其中创建供应商。在前端,一个供应商的页面有三个内容:一个名称、一个描述(HTML)和多个包含HTML的选项卡。我的客户希望选项卡是动态的,他们希望在添加供应商时能够添加/编辑/删除选项卡和内容

下面是我的数据库设计:

Vendors
-------------------
VendorID (PK)
Name
Description

VendorTabs
-------------------
VendorTabID (PK)
VendorID (FK)
Title
Content
这是我的视图模型:

public class VendorViewModel
{
    [ScaffoldColumn(false)]
    public int VendorId { get; set; }

    public string Name { get; set; }

    [AllowHtml]
    public string Description { get; set; }
}
以及我的控制器post方法:

[HttpPost]
public ActionResult Create(VendorViewModel viewModel, string[] tabTitles, string[] tabContent)
{
    var vendor = new Vendor();
    vendor.Name = viewModel.Name;
    vendor.Description = viewModel.Description;

    if (ModelState.IsValid)
    {
        for (int i = 0; i < tabTitles.Length; i++)
        {
            vendor.VendorTabs.Add(new VendorTab
            {
                VendorID = vendor.VendorID,
                Title = tabTitles[i],
                Content = tabContent[0]
            });
        }

        _vendorsRepository.SaveVendor(vendor);

        return RedirectToAction("Index");
    }

    return View(viewModel);     // validation error, so redisplay same view
}
[HttpPost]
公共操作结果创建(VendorViewModel视图模型,字符串[]选项卡标题,字符串[]选项卡内容)
{
var vendor=新供应商();
vendor.Name=viewModel.Name;
vendor.Description=viewModel.Description;
if(ModelState.IsValid)
{
对于(int i=0;i
在我看来,我具有动态添加/删除选项卡标题和选项卡说明字段的功能。它们通过数组
tabTitles
tabContent
传递给控制器。但是,当我在动态选项卡内容中发布带有HTML的表单时,会出现以下错误:

潜在危险的请求。从客户端检测到表单值

我以前遇到过这个问题,我的供应商的Description字段。经过一些研究,我发现我可以添加
allowtml
注释


如何将相同的功能应用于我的动态内容?

不使用数组
tabTitle
tabContent
,而是以一种可以将
allowtmlatAttribute
放在每个可以接收用户内容的单独属性上的方式构造视图模型,然后只需在要将视图绑定到的模型中包含这些内容的列表

public class TabViewModel
{
    [AllowHtml]
    public string Title { get; set; }

    [AllowHtml]
    public string Content { get; set; }
}

让[AllowHtml]string[]TabContent{get;set;}成为模型的一个属性如何?

Okay的可能副本,因此我现在将
IEnumerable Tabs
作为
VendorViewModel
的一个属性。如果我没有使用数组
tabTitle
tabContent
,如何将动态内容与
选项卡关联。我添加了一个答案,并意识到它基本上与您的答案完全相同(我不喜欢在我的答案之前阅读其他答案,以确保我的答案是原创的)+1:)在您的TabViewModel中创建一个属性,正如qntmfred所说的,专门用于这些列表,这样您就不依赖动态绑定,否则我认为您需要ValidateRequest(false)通常不建议这样做。字段的名称应类似于选项卡[0]。标题等。选项卡属性的类型可能应为TabViewModel[]。