2014-01-20 49 views
0

我有兩個具有相同模型的局部視圖,我正在使用devexpress回調。 我的問題是如果我可以知道在我的控制器功能哪部分視圖作出回調,然後渲染它?或者我需要複製函數,並在每個函數中呈現正確的局部視圖?如何在控制器中知道哪個局部視圖進行了回調

+0

我不知道devExpress是不是很難,但是你可以添加一個屬性給viewmodel,你可以把uni que值變成?將其渲染到視圖中的隱藏字段,然後檢查控制器中的屬性以查看您正在接收哪個視圖。 –

+0

我不明白該怎麼做才能添加代碼? –

回答

1

您的看法只會回傳給您。因此,您應該將您的視圖名稱傳遞到隱藏的字段容器中,作爲示例,然後從服務器端讀取此值。有人已經回答how to pass view name,我會試着擴展這個答案。

首先,你需要創建一些視圖,路徑解析擴展

public static class IViewExtensions 
{ 
    public static string GetViewName(this IView view) 
    { 
     string viewUrl = String.Empty; 
     if (view is BuildManagerCompiledView) 
     { 
      viewUrl = ((BuildManagerCompiledView)view).ViewPath; 
     } 
     else 
     { 
      throw new InvalidOperationException("Buld manager is not defined!"); 
     } 

     string viewFileName = viewUrl.Substring(viewUrl.LastIndexOf('/')); 
     string viewFileNameWithoutExtension = Path.GetFileNameWithoutExtension(viewFileName); 
     return (viewFileNameWithoutExtension); 
    } 
} 

那麼你的每個視圖,名稱傳遞到表單容器

@using ViewExtensionNamespace; 
<input type="hidden" id="ViewName" name="ViewName" value="@Html.ViewContext.View.GetViewName()" /> 

,並從服務器端閱讀

name = Request.Params["ViewName"]; 
+0

我現在嘗試它告訴我誰是控制器和什麼動作,但我想調用該功能的部分視圖名稱... –

+0

對不起,沒有理解你第一次正確的問題。我提供了另一種方式 – Michael

相關問題