Asp.net mvc ASP.NET MVC(4)-按一定顺序绑定属性

Asp.net mvc ASP.NET MVC(4)-按一定顺序绑定属性,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-2,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 2,Asp.net Mvc 4,有没有办法在C之前强制绑定属性a和B System.ComponentModel.DataAnnotations.DisplayAttribute类中有Order属性,但它会影响绑定顺序吗 我想要达到的是 page.Path = page.Parent.Path + "/" + page.Slug 在自定义ModelBinder中,为什么不将页面属性实现为: public string Path{ get { return string.Format("{0}/{1}", Parent

有没有办法在C之前强制绑定属性a和B

System.ComponentModel.DataAnnotations.DisplayAttribute类中有Order属性,但它会影响绑定顺序吗

我想要达到的是

page.Path = page.Parent.Path + "/" + page.Slug

在自定义ModelBinder中,为什么不将页面属性实现为:

public string Path{
    get { return string.Format("{0}/{1}", Parent.Path, Slug); }
}

我最初会推荐Sams答案,因为它根本不涉及路径属性的任何绑定。您提到可以使用Path属性连接这些值,因为这会导致延迟加载。因此,我认为您正在使用域模型向视图显示信息。因此,我建议使用视图模型仅显示视图中所需的信息(然后使用Sams应答检索路径),然后使用工具(即)将视图模型映射到域模型

但是,如果继续在视图中使用现有模型,并且无法使用模型中的其他值,则可以在其他绑定发生后(假设不对path属性执行验证),将path属性设置为自定义模型绑定器中的表单值提供程序提供的值

因此,假设您有以下视图:

@using (Html.BeginForm())
{
    <p>Parent Path: @Html.EditorFor(m => m.ParentPath)</p>
    <p>Slug: @Html.EditorFor(m => m.Slug)</p>
    <input type="submit" value="submit" />
}
最后,通过在视图模型上使用以下属性指定要使用此模型绑定器:

[ModelBinder(typeof(IndexViewModelBinder))]

我说的
page.Parent.Path
page.Slug
是从表单绑定到的,并且您希望
page.Path
设置为在绑定发生后将其内容连接起来,这样是否正确?i、 e.表单上不存在
page.Path
值?@正确,
page.Path
不在表单上。我从表单中获得
page.Parent.Id
page.Slug
,我想在
page.Parent
page.Slug
绑定之后构建
page.Path
。我非常确定,在使用诸如EditorForModel或DisplayForModel之类的Html帮助器方法时,会使用Order属性,这是一个会导致懒惰的完整模型逐个加载所有页面的祖先。例如,如果您显示10个页面(每个页面在层次结构中处于第3级),可能会导致额外的20个数据库查询。
[ModelBinder(typeof(IndexViewModelBinder))]