ASP.NET MVC 3 - 如何允许输入html textarea

时间:2013-04-17 22:28:21

标签: html asp.net-mvc asp.net-mvc-3 validation editor

我想使用粒度数据验证。 [AllowHtml]属性未与FormCollection一起使用。除了使用ValidateInput(false)

之外,还有其他选择 元数据中的

[AllowHtml]
[DataType(DataType.MultilineText)]
[Display(Name = "Content")]
public string Content { get; set; }

in edit action:

[HttpPost]
public virtual ActionResult Edit(int id, FormCollection formCollection)
{
    var obj = service.Get(id);

    if (ModelState.IsValid)
    {
        UpdateModel(obj, formCollection);
        service.Update(obj);

        return OnEdited(obj);
    }

    return View(obj);
}

2 个答案:

答案 0 :(得分:1)

您不能将AllowHtml与FormCollection一起使用。您可以使用[ValidateInput]属性,但显然禁用所有值的验证:

[HttpPost]
[ValidateInput(false)]
public ActionResult Edit(FormCollection collection, int id)
{
    var myEntity = _myRepo.Get(id);
    TryUpdateModel(objective);
    return DoSave(objective);
}

据说我会使用以下内容:

[HttpPost]
public ActionResult Edit(MyEntity entity)
{
    if (ModelState.IsValid)
    {
        _myRepo.Save(entity);
        return RedirectToAction("Success");
    }
    return View(entity);
}

绑定FormCollection时它不起作用的一个简单原因是因为没有任何东西可以将你在某些类的某些属性上定义的AllowHtml与当前正在执行的请求相关联。

答案 1 :(得分:0)

[HttpPost]
public virtual ActionResult Edit(T obj)
{
    if (ModelState.IsValid)
    {
        if (TryUpdateModel(obj))
        {
            T old = service.Get(obj.ID);
            UpdateModel(old);
            service.Update(old); // EntityModelObject.SaveChanges();

            return OnEdited(obj);
        }
    }

    return View(obj);
}