2010-09-02 54 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

相关问题