2010-09-07 22 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