【发布时间】:2014-04-08 08:43:08
【问题描述】:
我有一个用于从表中删除对象的表单。我想放置一个文本字段,在按下删除按钮之前验证输入。
对象的实体模型是这样的(它还有很多属性,但我只留下了重要的一个):
public partial class card
{
public string reason { get; set; }
}
POST(删除)请求的控制器方法如下所示:
// POST: /card/Delete/5
[HttpPost, ActionName("Delete")]
[ValidateAntiForgeryToken]
public ActionResult DeleteConfirmed(int id)
{
card temp_card = db.cardss.Find(id);
temp_card.deleted = true;
db.SaveChanges();
if (ModelState.IsValid)
return RedirectToAction("Index");
return View(temp_card);
}
我读过,我必须创建另一个类并使用 MetaDataAnnotations 才能工作,因为我使用的是实体模型。所以我写了这个:
[MetadataType(typeof(CardMetaData))]
public partial class card
{
public string reason { get; set; }
}
public class CardMetaData
{
[Required(ErrorMessage = "Write a reason for deletion.")]
public string reason { get; set; }
}
在我的 Delete.aspx 中有以下几行:
<%= Html.ValidationSummary("Delete was unsuccessful.") %>
<div class="display-field">
<%: Html.TextBoxFor(model => model.reason) %>
<%: Html.ValidationMessageFor(model => model.reason) %>
</div>
如果我按下删除按钮并且文本字段为空,则不会显示消息。我错过了什么?
【问题讨论】:
-
我不确定您是否需要将 reason 属性添加到新的部分类,只是元数据类 - 请参阅此示例:http://www.asp.net/mvc/tutorials/older-versions/models-%28data%29/validation-with-the-data-annotation-validators-cs
-
部分类中的属性是在那里生成的。我没有添加它们。
-
您需要编码
if (ModelState.IsValid) return View("ViewThatIsReturning",modelClassName);。您的 DeleteConfirmed 方法必须将您的 modelClass 作为参数,以便您可以将其传递回视图,以便在!ModelState.IsValid时显示错误
标签: c# .net asp.net-mvc-4