2015-08-25 28 views
0

我有一個視圖,我想渲染一個特定的部分取決於窗口的大小。MVC4渲染基於屏幕分辨率的Html.Partial

觀的樣子:

@using (Html.BeginForm("Index", "search", FormMethod.Get)) 
{ 
     @Html.Partial("_Search") 

     <div class="searchmob" style="display: none;"> 
       <h1>mobile</h1> 
       @Html.Partial("_SearchComponentMobile") 
     </div> 
} 

默認DIV searchmob是無形的,使得屏幕出現小div時(它的工作原理)

問題既諧音的包含文本框@Html。 TextBox具有相同的名稱,所以當從_SearchComponentMobile提交時,它會發送_Search的文本框值。

是否有可能在需要時渲染特定的部分。

我在我的觀點下面的代碼一個使用,但在上述飽和它關係到一個css,希望類似的事情可以完成:

@{ 
    var act = ViewContext.RouteData.Values["action"].ToString().ToUpper(); 
} 

@if (@act == "INDEX") 
{ 
     //render a partial view otherwise it doesn't 
} 

我使用的引導,也許這也可以幫助我?

回答

1

您是否嘗試過使用內置於MVC的DisplayModeProviders? 實質上,如果請求來自移動平臺,視圖引擎將查找視圖的「覆蓋」。

所以,你的主視圖看起來像:

@using (Html.BeginForm("Index", "search", FormMethod.Get)) 
{ 
    @Html.Partial("_Search") 
} 

然後重命名_SearchComponentMobile.cshtml_Search.mobile.cshtml,讓MVC把其餘的工作(注意,你需要你<div class="searchmob">進入部分,如果它有造型與之相關聯)

這裏更多的信息,如果你需要它:


編輯

否則重複移動佈局內的形式....

@using (Html.BeginForm("Index", "search", FormMethod.Get)) 
{ 
    @Html.Partial("_Search") 
} 

<div class="searchmob" style="display: none;"> 
    <h1>mobile</h1> 
    @using (Html.BeginForm("Index", "search", FormMethod.Get)) 
    { 
     @Html.Partial("_SearchComponentMobile") 
    } 
</div> 
+0

這個問題,如果用戶使屏幕上的小桌面,我需要渲染正確的部分和DisplayModeProviders它只適用於使用移動設備。 – Ben

+0

@Ron,如果你在桌面上完全響應佈局,那麼你的解決方案很可能是CSS驅動的。您需要分析桌面版和移動版搜索版式之間的標記和CSS之間的差異。根據您向我們展示的內容,標記應該相似(搜索框在同一區域中呈現),因此,請弄清楚CSS中的差異併爲兩種佈局制定風格,而不是隱藏/顯示盒子。 –

+0

@Ron另請參閱我的編輯另一個快速修復 –