2010-09-02 35 views
0

我試圖實現系統中每個頁面上存在的Widget控件,這將允許用戶在每個頁面上都具有基本搜索目錄功能。這是一個下面定義的選項卡控件,其中<ul>當前選定的選項卡由Model.CurrentTab中的值確定,我想顯示的對應內容(基本上可見)也由該值確定。當我將「」傳遞給RenderAction時,爲什麼這個View Model會被填充?

<div class="WidgetControl"> 

    <ul class="WidgetTab tabs"> 
     <li <%= (Model.CurrentTab == "Search") ? "class='active'" : "" %>> 
      <span href='<%= Url.Action("SearchBox", "Search") %>'>Search</span> 
     </li> 

     <li <%= (Model.CurrentTab == "Directory") ? "class='active'" : "" %>> 
      <span href='<%= Url.Action("DirectoryList", "Group") %>'>Directory</span> 
     </li> 
    </ul> 

    <div id="Search" class="tab_container"> 
     <% Html.RenderAction("SearchBox", "Search" 
        , (Model.CurrentTab == "Search") ? Model.Search : ""); %> 
    </div> 

    <div id="Directory" class="tab_container"> 
     <% Html.RenderAction("DirectoryList", "Group" 
        , (Model.CurrentTab == "Directory") ? Model.Search : ""); %> 
    </div> 
</div> 

我想加載兩個SearchDirectory是這樣的頁面沒有要求根據被點擊的選項卡內容的原因。我希望它立即可用。

我遇到的問題是,如果CurrentTab包含值「目錄」,這意味着(我認爲)Html.RenderAction("SearchBox"...應傳入一個空字符串。但是當它到達操作方法時,傳遞到SearchBox的視圖模型包含值而不是""

我不明白爲什麼會發生這種情況。即使我將一個空字符串傳入SearchBox,View Model仍然包含一個值。有人能解釋一下發生了什麼嗎?我應該這樣做嗎?

更新:

public PartialViewResult DirectoryList(DirectoryViewModel vm) 
    { 
     return PartialView(vm.Search); // this is expecting a string 
    } 

    public PartialViewResult SearchBox(SearchViewModel vm) 
    { 
     return PartialView(vm); // the among other things, the Search string is used 
    } 

兩個DirectoryViewModelSearchViewModel含有一種叫Search

+0

你能告訴我們DirectoryList和SearchBox的方法定義嗎?我正在努力研究正在發生的事情。 – 2010-09-02 23:32:41

+0

分享模型錯誤的價值會有所幫助。 – jfar 2010-09-02 23:40:21

+0

@Alistair,我已經更新了這個問題 – DaveDev 2010-09-02 23:42:55

回答

1

ModelBinder將在ActionMethod的參數中新建()任何對象。如果沒有實現你自己的modelbidner,我不認爲這種行爲可以被關閉。您需要創建一個沒有參數的重載並相應地路由它。

0

如果你是這樣的

<% Html.RenderAction("SearchBox", "Search", 
        new { vm = ((Model.CurrentTab == "Search") ? Model.Search : "") }); %> 

做一些自Html.RenderAction的第三個參數是財產object routeValues這是一個詞典請注意您正在調用的動作參數爲Key。如果您未指定參數Html.RenderAction的參數routeValues,它將始終將object值傳遞給您的動作的參數vm

相關問題