绑定属性,排除复杂类型的嵌套属性

5

如何在控制器中包含或排除嵌套属性?

我有一个“Stream”模型:

public class Stream
{
    public int ID { get; set; }

    [Required]
    [StringLength(50, ErrorMessage = "Stream name cannot be longer than 50 characters.")]
    public string Name { get; set; }

    [Required]
    [DataType(DataType.Url)]
    public string URL { get; set; }

    [Required]
    [Display(Name="Service")]
    public int ServiceID { get; set; }

    public virtual Service Service { get; set; }
    public virtual ICollection<Event> Events { get; set; }
    public virtual ICollection<Monitor> Monitors { get; set; }
    public virtual ICollection<AlertRule> AlertRules { get; set; }
}

对于这个模型的“创建”视图,我已经创建了一个视图模型来向视图传递一些额外的信息:

public class StreamCreateVM
{
    public Stream Stream { get; set; }
    public SelectList ServicesList { get; set; }
    public int SelectedService { get; set; }
}

这是我的创建文章动作:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include="Stream, Stream.Name, Stream.ServiceID, SelectedService")] StreamCreateVM viewModel)
    {
        if (ModelState.IsValid)
        {
            db.Streams.Add(viewModel.Stream);
            db.SaveChanges();
            return RedirectToAction("Index", "Service", new { id = viewModel.Stream.ServiceID });
        }

        return View(viewModel);
    }

现在,所有的东西都可以运作,除了[Bind(Include="Stream, Stream.Name, Stream.ServiceID, SelectedService")]这一部分。我似乎无法包含或排除嵌套对象中的属性。
1个回答

0
根据这个答案,你可以这样做:
[Bind(Include="Name, ServiceID")]
public class Stream
{
...
}

然后

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="Stream, SelectedService")] StreamCreateVM viewModel)
{
...
}

谢谢,但我在控制器中有其他需要绑定到不同属性的操作,所以这个建议会排除那些操作。 - David Board

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接