2016-11-17 147 views
0

新使用剃刀視圖,並欣賞任何建議。我在視圖:在剃刀視圖中覆蓋變量

Script.Require("Accounts"); 
var o = sidePanel.Entities.ToString(WorkContext.CurrentUser, false); 

var t = sidePanel.Entities.Title; 
<text> 
    <article class="widget-aside-right widget-accounts-side-widget widget"> 
     <accounts-side-widget @o title="@t" /> 
    </article> 
</text> 

和C#toString方法是:

public string ToString(IUser user, bool isOpenDynamic = true) 
{ 
    // todo (tba 11/3/15): why is groups always included? 
    string options = (AllAccounts ? " allaccounts" : string.Empty) 
        + (EntityGroups ? " groups" : string.Empty) 
        + (Balance ? " balance" : string.Empty) 
        + (Number ? " number" : string.Empty) 
        + " isOpen=" + (IsOpen && isOpenDynamic) 
        + (ClientCode ? " clientCode" : string.Empty) 
        + (BaseCurrency ? " baseCurrency" : string.Empty) 
        + " missingdatareportid=" + MissingDataReportId 
        + (ReportBook && user.HasPermission(PermissionType.ReportBook) ? " reportbook" : string.Empty) 
        + (AccountDetailPopup ? " details" : string.Empty); 

    return options; 
} 

我不能改變的變量在後端,因爲它會使用相同的後端,但影響到很多其他客戶端視圖是特定於此客戶端的。因此,我需要能夠在視圖中而不是在後端中更改某個變量(isOpen)的值。

閱讀關於使用Javascript和JQuery設置變量,但看到這不是一個好主意。

回答

1

只需爲該特定客戶端編寫另一版本的ToString(..)方法,將其稱爲ToStringForABCInc(...)這樣,您就可以維護其他客戶端的現有邏輯和視圖,並具有特定的視圖和邏輯有特殊要求的客戶。

+0

它是一個好主意,但基本上我無法編輯C#圖層bse它需要爲所有客戶端標準。 –

+0

它會的。如果從視圖中調用ToString方法,並且有問題的視圖只被一個客戶端使用,則項目的完整性將保持不變。或者你可以在我認爲的視圖中寫一個幫手,但恕我直言,這太臭了。爲什麼有一條除了必須找到方法之外什麼都不能實現的規則? – DrMistry

+0

將upvote。沒有使用這種方法,但可以工作。 –