我正在尝试实现一个小部件控件,该控件存在于系统中的每个页面上,它允许用户在每个页面上具有基本的搜索和目录功能。这是下面定义的选项卡控件,其中
<ul>
当前选定的选项卡由中的值确定。
Model.CurrentTab
我想要显示的相应内容(基本上是可见的)也由这个值决定。
<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>
我想两者都加载的原因
Search
和
Directory
因此,页面不必根据单击的选项卡请求内容。我希望一切都能立即得到。
我的问题是如果
CurrentTab
包含值“directory”,这意味着(我假定)
Html.RenderAction("SearchBox"...
应传入空字符串。但当它到达action方法时,视图模型传递到
SearchBox
包含一个值,而不是
""
我不明白为什么会这样。即使当我把一根空字符串传递给
搜索框
,视图模型仍然包含一个值。有人能解释一下发生了什么事吗?我应该换一种方式吗?
更新:
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
}
两个
DirectoryViewModel
和
SearchViewModel
包含一个名为
搜索