2010-09-07 20 views
0

我正在ASP.NET MVC 2中创建一个强类型的搜索表单,通过FormMethod.Get发布到结果页面(即表单输入及其值发布到搜索结果查询字符串)。我如何指定使用模型的嵌套类而不是模型本身的强类型html助手,这样我就不会在查询字符串中获得输入名称的点符号?如何指定使用模型的嵌套类而不是模型本身的强类型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

一种方法是使名称的视图模型即属性格式:

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

并在视图:

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

不管这是个好主意是另一个问题。

+0

不确定我遵循 - 我刚刚向您展示的功能与您已经在做的功能相同,MVC将不会添加SearchQuery前缀。也就是说,在视图中,m.Name和m.SearchQuery.Name是相同的,第一个只是第二个“快捷方式”。 – automagic 2010-09-07 18:06:02

+0

对不起,我没有仔细查看你的答案。问题是我必须在视图模型上创建一组重复的属性,以反映SearchQuery属性。如果我可以避免这样做,这将是更可取的。 – user441685 2010-09-07 18:22:10

+0

note ..我删除了我的第一条评论,因为它不相关。 – user441685 2010-09-07 18:32:13