2

我需要将一个复杂的对象(模型)绑定到视图。我有一个搜索模型和搜索视图..

搜索模型,

public class SearchModel
{
    public SearchCriteria SearchCriteria { get; set; }
    .....
}

搜索条件

public class SearchCriteria
{
    public int AccountId { get; set; }
    public string AccountName { get; set; }
    ......
}

搜索视图

@Html.LabelFor(x => x.SearchCriteria.AccountId, "Account ID")
@Html.TextBoxFor(x => x.SearchCriteria.AccountId)
@Html.LabelFor(x => x.SearchCriteria.AccountName, "Account Name")
@Html.TextBoxFor(x => x.SearchCriteria.AccountName)

这呈现为

<label for="SearchCriteria_AccountId">Account ID</label>
<input id="SearchCriteria_AccountId" name="SearchCriteria.AccountId" type="text" value="">
<label for="SearchCriteria_AccountName">Account Name</label>
<input id="SearchCriteria_AccountName" name="SearchCriteria.AccountName" type="text" value="">

控件名称呈现为SearchCriteria.AccountIdSearchCriteria.AccountName控件 ID 呈现为SearchCriteria_AccountIdSearchCriteria_AccountName

在获取请求中提交表单时,查询字符串将如下所示,

?SearchCriteria.AccountId=1&SearchCriteria.AccountName=aaa

有没有办法将它们更改为不带SearchCriteria后缀显示?

因此控件名称应呈现为AccountIdAccountName控件 ID 应呈现为AccountIdAccountName

和查询字符串应该看起来像,

?AccountId=1&AccountName=aaa
4

1 回答 1

0

如果您希望 MVC 进行自动绑定,则无法更改。如果你愿意,你当然可以提供你自己的名字。但是,更推荐的方法是构建ViewModel这样的:

public class SearchViewModel
{
    public int AccountId { get; set; }
    public string AccountName { get; set; }
    ...
}

使复杂模型变平。这是推荐方法的原因是因为 aView并不是一个真正的复杂模型,它只是一个更复杂的底层模型的视图。然后,您可以使用自动映射器非常轻松地将展平后的模型映射ViewModel回控制器方法顶部的复杂模型。

于 2013-06-05T13:56:09.497 回答