【发布时间】:2015-12-10 14:40:01
【问题描述】:
我想用所见即所得的编辑器发布一个 html,所以我在我的属性上使用了 [AllowHtml] 属性。它可以工作,但是当我将它与[Required] 和[StringLength] 属性一起使用时,它会停止工作。 ModelState.IsValid 即使 prop 为空也返回 true。
是的,我知道如果它为空我可以手动控制它并向ModelState添加错误,但是为什么呢?
为什么会这样?有没有更好的方法将一些 HTML 代码发布到后端?
我的 dto:
public int Id { get; set; }
[Required(ErrorMessage = CErr.RequiredField)]
[StringLength(100, ErrorMessage = CErr.Min5Max100)]
[MinLength(5, ErrorMessage = CErr.Min5Max100)]
public string Name { get; set; }
[AllowHtml]
[Required(ErrorMessage = CErr.RequiredField)]
[StringLength(4000, ErrorMessage = CErr.TooLongValue)]
public string HtmlBody { get; set; }
我的行动:
[Route("new")]
[HttpPost]
public ActionResult NewMessageLayout(ManageMessageLayoutDto model)
{
if (ModelState.IsValid)
{
var response = Repositories.MessageLayoutRepository.SaveMessageLayout(model, CurrentUser.Id);
if (response.Status == ResultStatus.Success)
{
return RedirectToAction("MessageManagement");
}
else
{
ModelState.AddModelError("error", response.Message);
return View("ManageMessageLayout", model);
}
}
return View("ManageMessageLayout", model);
}
还有一些 HTML:
@using (Html.BeginForm())
{
@Html.HiddenFor(m => m.Id)
<label>Name <span class="req">*</span></label>
@Html.TextBoxFor(m => m.Name, new { @class = "form-control" })
@Html.ValidationMessageFor(m => m.Name, null, new { @class = "label label-danger" })
<label>Content <span class="req">*</span></label>
@Html.TextBoxFor(m => m.HtmlBody)
@Html.ValidationMessageFor(m => m.HtmlBody, null, new { @class = "label label-danger" })
<input class="btn btn-success btn-block btn-lg" type="submit" value="@(editing ? "Save" : "Add")" />
}
【问题讨论】:
-
您是否在使用任何富文本编辑器,例如 tiny mce 或 Ckeditor?
-
@MDDDC 是的,我正在使用 Ckeditor,但我尝试使用常规文本框和区域,但它是相同的......
-
您是否获得有关 HTmlBody 的 post 方法的任何数据?您能停下来看看吗?
-
@MDDDC 我的朋友,这似乎是无效的。
-
@gkon,“我的朋友,这似乎是无效的。”你是什么意思?它要么为空,要么不为空。你设置断点了吗?
标签: asp.net-mvc validation asp.net-mvc-5