我受到以下的影响
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset>
<legend>Posts</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
<h4>Теги:</h4>
</div>
<div class="editor-field">
<input type="text" name="tags" value="@ViewBag.Tags"/><br />
</div>
@Html.HiddenFor(model => model.DateTime, new { @Value = System.DateTime.Now.ToString("dd-MM-yyyy HH:mm:ss") })
@Html.ValidationMessageFor(model => model.DateTime)
<h5>body:</h5><textarea name="body" rows="10" cols="80" required >
</textarea><br />
<div class="editor-label">
@Html.LabelFor(model => model.Avtor)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Avtor)
@Html.ValidationMessageFor(model => model.Avtor)
</div>
<p>
<input type="submit" value="save" />
</p>
</fieldset>
}
in
public ActionResult Create([Bind(Include = "Id,Title,DateTime,Body,Avtor")] Posts post, string tags, string body)
{
if (ModelState.IsValid)
{
tags = tags ?? string.Empty;
string[] tagNames = tags.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string tagName in tagNames)
{
post.Tags.Add(GetTag(tagName));
}
post.Body = body;
db.Posts.Add(post);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(post);
}
公共部分类帖子
{
public Posts()
{
this.Comments = new HashSet<Comments>();
this.Tags = new HashSet<Tags>();
}
public int Id { get; set; }
[Required]
[StringLength(64, MinimumLength = 1)]
public string Title { get; set; }
public System.DateTime DateTime { get; set; }
[Required]
[AllowHtml]
public string Body { get; set; }
[Required]
[StringLength(64, MinimumLength = 1)]
public string Avtor { get; set; }
public virtual ICollection<Comments> Comments { get; set; }
public virtual ICollection<Tags> Tags { get; set; }
}
如果用户在textarea中拨打纯文本,那没关系,但是需要添加代码文本。它会生成<pre> and <code>
,但它只能在程序中使用,而不是textarea中的用户。严格来说,如何在tehtarea中这样做可以编写代码并将其保存在数据库中,而不是使用<a> <script>
得到错误,并且可以在文本中看到它们。所以航天器本身就是在这个网站上实现的。提前谢谢。
答案 0 :(得分:1)
创建强类型模型以接受发布到服务器的数据,使用数据注释AllowHtml接受HTML作为输入:
public class SomeViewModel
{
Posts Post { get; set; }
[AllowHtml]
public string Body { get; set; }
}
然后将控制器更改为
public ActionResult Create(SomeViewModel model)
{
if (ModelState.IsValid)
{
model.Post.Body = model.Body;
db.Posts.Add(model.Post);
db.SaveChanges();
return RedirectToAction("Index");
}
return RedirectToAction("Index");
}
还可以尝试将其添加到页面部分正上方的web.config文件中的以下位置:
<system.web>
...
<httpRuntime requestValidationMode="2.0" enableVersionHeader="false" />
<pages...
...
</system.web>
更改请求验证模式基本上只会验证页面而不是每个http请求。您可以在MSDN HttpRuntimeSection.RequestValidationMode
上阅读更多相关信息答案 1 :(得分:0)
使用AllowHTMLAttribute
请参阅此MSDN
这只允许在viewmodel中为该特定字段提供html,但不允许使用html。
或者您可以这样做:
[ValidateInput(false)]
public ActionResult someAction(SomeViewModel model)
{
//Your code to handle the control
}
编辑:请注意,您的textarea不是HTML中模型的一部分,您可以将<textarea name="body"....
行更改为:
@Html.TextArea("body", new { rows=10, columns=80 })
之后,您的body textarea元素应该能够将HTML元素捕获到您的控制器。