如何指定使用模型的嵌套类而不是模型本身的强类型html帮助器?

时间:2010-09-07 17:39:38

标签: asp.net-mvc-2 html-helper

我在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表达式执行某些操作,但我似乎无法正确使用语法..

感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是使Name成为ViewModel的属性,即:

public string Name{ get{ return this.SearchQuery.Name; } }

在视图中:

<%= Html.TextBoxFor(m => m.Name)%>

这是否是一个好主意是另一个问题。