将复杂对象模型绑定到视图
本文关键字:视图 绑定 对象模型 复杂 | 更新日期: 2023-09-27 18:16:56
我需要将一个复杂对象(模型)绑定到视图。我有一个搜索模型和搜索视图..
搜索模型,
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.AccountId
、SearchCriteria.AccountName
,控件id显示为SearchCriteria_AccountId
、SearchCriteria_AccountName
和在get请求中提交表单时,查询字符串将看起来像,
?SearchCriteria.AccountId=1&SearchCriteria.AccountName=aaa
是否有办法改变它们显示没有SearchCriteria
后缀?
控件名称应该显示为AccountId
, AccountName
,控件id应该显示为AccountId
, AccountName
和querystring应该看起来像
?AccountId=1&AccountName=aaa
如果您希望MVC执行自动绑定,则无法更改此设置。如果你愿意,你当然可以提供你自己的名字。但是,更推荐的方法是像这样构建ViewModel
:
public class SearchViewModel
{
public int AccountId { get; set; }
public string AccountName { get; set; }
...
}
使复杂模型变平。之所以推荐这种方法,是因为View
并不是一个真正的复杂模型,它只是一个更复杂的底层模型的视图。然后,您可以使用自动映射器非常容易地将扁平的ViewModel
映射回控制器方法最顶部的复杂模型。