asp.net-mvc - 在 asp.net mvc 绑定(bind)中使用 Include 和 Exclude 或创建一个新的子集对象?

标签 asp.net-mvc

创建一个仅包含用户将在网页上输入的那些属性的对象,将其用于控制​​器中的绑定(bind),然后映射到完整的实体对象是否有意义?或者你应该只使用实体对象,并使用 Include 和 Exclude 来限制输入的内容?

最佳答案

我开始喜欢使用接口(interface)来隔离更新对象时应包含哪些属性的想法。

例如:

创建和更新人物对象:

interface ICreatePerson
{
  string Name { get; set; }
  string Sex { get; set; }
  int Age { get; set; }
}

interface IUpdatePerson 
{
  string Name { get; set; }
}

class Person : ICreatePerson, IUpdatePerson
{
  public int Id { get; }
  public string Name { get; set; }
  public string Sex { get; set; }
  public int Age { get; set; }
}

然后,在绑定(bind)模型时,只需使用适当的接口(interface)作为类型,它只会更新名称属性。

这是一个示例 Controller 方法:

public ActionResult Edit(int id, FormCollection collection)
{
    // Get orig person from db
    var person = this.personService.Get(id);

    try
    {
        // Update person from web form
        UpdateModel<IUpdatePerson>(person);

        // Save person to db
        this.personService.Update(person);

        return RedirectToAction("Index");
    }
    catch
    {
        ModelState.AddModelErrors((person.GetRuleViolations());

        return View(person);
    }
}

参见 this article (和评论)对选项进行了很好的讨论。

关于asp.net-mvc - 在 asp.net mvc 绑定(bind)中使用 Include 和 Exclude 或创建一个新的子集对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/749761/

相关文章:

asp.net-mvc - 数据库中的动态站点地图不显示节点

asp.net-mvc - MVC 5 动态数据表单 - 未发布到 Controller 的模型列表

c# - 在单独的项目中共享 javascript 文件

c# - 我应该在输入字段中对值进行 html 编码吗?

c# - 如何在 ASP.NET 的代码隐藏中获取安全的 cookie 值

c# - 在 Asp.Net MVC 中设置 "Homepage"

asp.net-mvc - Asp.Net MVC Bundling,检测丢失文件的最佳方法

jquery - 如何将 Html.Action 附加到 jquery

ASP.NET MVC 3 的 jquery ajax 表单

c# - 目录不存在。参数名称 : directoryVirtualPath