我在ASP.NET MVC 2中创建了一个强类型搜索表单,它通过FormMethod.Get发布到结果页面(即表单输入及其值被发布到搜索结果查询字符串)。如何指定使用模型的嵌套类而不是模型本身的强类型html助手,这样我就不会在查询字符串中获得输入名称的点表示法?
我的强类型视图模型类如下所示:
public class SearchViewModel
{
public SearchQuery SearchQuery { get; set; }
public IEnumerable<SelectListItem> StateOptions { get; set; }
...
}
SearchQuery类看起来像:
public class SearchQuery
{
public string Name { get; set; }
public string State { get; set; }
...
}
这样做:
<%= Html.TextBoxFor(m => m.SearchQuery.Name)%>
将生成一个名为SearchQuery.Name
的输入,当发布表单时,会在查询字符串中放置&SearchQuery.Name=blah
。相反,我更喜欢&Name=blah
,因为只有SearchQuery属性才会有关联的表单元素。
我假设我必须对Html.TextBoxFor
Linq表达式执行某些操作,但我似乎无法正确使用语法..
感谢您的帮助!!
答案 0 :(得分:0)
解决此问题的一种方法是使Name成为ViewModel的属性,即:
public string Name{
get{
return this.SearchQuery.Name;
}
}
在视图中:
<%= Html.TextBoxFor(m => m.Name)%>
这是否是一个好主意是另一个问题。