asp.net-mvc-3 - ASP.Net MVC 3 - 绑定(bind)包含/排除和验证

标签 asp.net-mvc-3 binding

虽然我使用 Bind-Include 仅编辑对象属性的一部分,但对未包含的属性的验证仍在触发,表单提交后我的模型状态无效。

这是我的模型的简化版本:

public partial class MyObject
{
    public int MyObjectId { get; set; }
    public int personId { get; set; }
    public string myString1 { get; set; }
    public Nullable<int> friend1Id { get; set; }
    public Nullable<int> friend2Id { get; set; }

    public virtual People person { get; set; }
    public virtual People Friend1 { get; set; }
    public virtual People Friend2 { get; set; }
}

我有一个 Controller ,只能编辑该对象上的 friend (Friend1 和 Friend2),如下所示:

[HttpPost]
public ActionResult Assignation([Bind(Include = "friend1Id,friend2Id")]MyObject myObject)
{
    if (ModelState.IsValid)
    {
        db.Entry(myObject).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    ViewBag.friend1Id = new SelectList(db.People, "personId", "Name", myObject.friend1Id);
    ViewBag.friend2Id = new SelectList(db.Divisions, "personId", "Name", myObject.friend2Id);
    return View(myObject);
}

在我看来,我只有两个下拉列表来选择 friend ,以及一个“保存”按钮。然而,当我单击“保存”时,我的模型返回为无效。如果我查看 ModelState 内的属性集合,我会发现一条错误消息,指出需要 myString1。 myString1 在数据库中的类型为 nvarchar(100) NOT NULL,但我认为不会对该字段进行验证,因为我没有将其包含在绑定(bind)中。难道是我对Bind的理解有误?请耐心等待,我是 ASP.Net MVC 的新手。我正在使用 MVC 3 和 EF 4.1 以及强类型 View 。

最佳答案

我认为验证仍然假设您想要使用有效的模型。即使您现在只绑定(bind) 2 个属性,其他属性的默认值仍然可以确保模型有效。如果您想使用这个部分无效的模型并忽略其他字段,您还可以专门检查这两个属性,如果您使用 IsValidField 方法,您可以在其中传递属性名称:

ModelState.IsValidField("friend1Id") && ModelState.IsValidField("friend2Id")

我不完全理解的是,如果该属性没有必需的属性,为什么会出现这样的验证错误。或者它只是在您的问题中被截断了?

或者,您可以为该场景创建一个仅包含这两个字段的模型类。它可能会更好地描述情况,而且数据库条目的更新会更清晰(通过id查找现有实体(顺便说一句,id当前来自哪里?),并使用模型属性随帖子一起提供。我仍然想知道“if valid”分支中的代码是否真的会按照您的预期保存一些内容...)

关于asp.net-mvc-3 - ASP.Net MVC 3 - 绑定(bind)包含/排除和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7166622/

相关文章:

binding - 如何绑定(bind)到 ItemsPanel 中的网格?

sql - 查询中的 Node mssql 绑定(bind)

objective-c - 如何在多个 NIB 文件上共享 NSNumberFormatter?

c# - 可编辑复合主键

asp.net-mvc-3 - MVC3 不显眼的验证扩展;条款和条件复选框

asp.net-mvc-3 - asp.net mvc 3 - MVC 3 Razor : Country selection drop down list

javascript - 为什么按钮中的 event.target 返回空值?

c# - 无法从用法 mvc3 中推断出类型参数

html - 一个简单的 html 上下文菜单的实现

wpf - 设置绑定(bind)到 WPF 用户控件内的自定义 DependencyProperty