2015-08-15 53 views
2

有沒有辦法將文本作爲Razor代碼執行?我將表單的HTML/JavaScript存儲在數據庫字段中。一切都很好,除了我想在視圖中拉入和渲染時在字段上設置值。例如:從字符串執行Razor代碼

<p class="form-control-static" id="requested_by">@User.Identity.GetUserName()</p> 

不幸的是,當這一點在被拉動並呈現的字段的值僅僅是文本「@ User.Identity.GetUserName()」,而不是從該方法的返回值。

如果您好奇我爲什麼以這種方式做事,那麼表單需要根據誰登錄進行完全動態的調整。我已經仔細研究了幾種不同的解決方案,但是這似乎是最好的。如果你有他們,我肯定會接受其他一些想法。

這裏是我能迄今考慮的解決方案:

存儲字段名和數據庫中的屬性和動態創建通過迭代形式。這裏的問題是一些字段被分組到字段集中,一些字段被添加,一些部分需要自定義按鈕等。這當然可以完成,但我認爲這是過度工程和強制解決方案。

在HTML/JavaScript/Razor中構建表單並將所有字段名稱與關聯的用戶ID一起存儲在數據庫中。根據登錄用戶是否有權訪問該字段,有條件地顯示這些字段。 Pseudo: @if(user.FormFields.Contains("field_name") ...

我現在正在嘗試的解決方案:將所有HTML/JavaScript/Razor作爲文本存儲在數據庫中,並使用@Html.Raw(HtmlFromDatabase)進行呈現。正如我所說,除了沒有執行的Razor代碼外,這一切都很有名。

任何幫助或建議,非常感謝。

回答

0

用途:

@Html.Raw(System.Web.HttpUtility.HtmlDecode(Model.yourhtmlvalue)) 

OR

<%= System.Web.HttpUtility.HtmlDecode(yourEncodedHtmlFromYouDatabase) %> 

更多信息:Here

+0

不幸的是,這將產生相同的結果。在渲染之前,不會處理HTML字符串中的Razor代碼。 – Joe