C# 动态HTML内容-“;潜在危险的请求。从客户端检测到表单值;
我正在使用MVC3和Razor 我有一个页面,您可以在其中创建供应商。在前端,一个供应商的页面有三个内容:一个名称、一个描述(HTML)和多个包含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
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[]。