2010-12-20 135 views
3

我使用MVC 3 w/Razor並使用新的動態ViewBag屬性。我想用EditorFor/LabelFor Html助手使用ViewBag屬性,但無法弄清楚語法。ASP.Net MVC,動態屬性和EditorFor /標籤

該視圖確實有@model集,但我嘗試使用的對象不是該模型的一部分。我知道我可以創建一個ViewModel,但這不是我所追求的。

任何人都可以幫忙嗎?

控制器:

var myModel= _repo.GetModel(id); 
    var newComment = new Comment(); 

    ViewBag.NewComment = newComment; 

    return View(myModel); 

查看:

@model Models.MyModel 

@(Html.EditorFor(ViewBag.NewComment.Comment)) 

回答

5

我還沒有嘗試過,但這應該工作,我認爲。

@(EditorFor(m => ViewBag.NewComment) 

可以使用Linq-to-SQL語法,但在右側使用完全不同的對象。

+0

做這個工作? – 2013-04-19 09:01:42

+1

@bahadirarslan這不起作用(表達式樹不能包含動態表達式)。作爲一種可能的解決方法,您可以將動態模型轉換爲其基礎類型(請參閱我對此解決方法的回答)。 – 2014-05-15 11:10:25

+0

這對定製編輯器也不起作用。例如,在你的模型上使用像這樣的'[DataType(DataType.Html),UIHint(「tinymce_jquery_full」),AllowHtml]'的UIHint。最好創建一個局部視圖並將模型對象傳遞給它。 – 2016-02-15 16:38:31

1

不知道您的評論模型是什麼樣子,我的直覺反應是隻做到:

@Html.EditorFor(ViewBag.NewComment) 

然而,因爲ViewBag是動態的,您可能需要在使用它之前投射NewComment,以獲得EditorFor mag我知道了。

@Html.EditorFor(ViewBag.NewComment as Comment) 

更新

罷工,EditorFor只能接受一個表達式作爲參數,並表達必須返回頁面模型的屬性。如果您不想使用ViewModel,我認爲EditorFor或EditorForModel不會對您有任何用處。你有沒有考慮將你使用Model的角色與ViewBag的角色進行切換?

+0

您的意思是「您是否考慮過切換角色,無論您使用的是模型還是VIEWMODEL」?否則,我不確定你的意思。 – 2010-12-20 23:14:52

+0

嗨,我的意思是EditorFor似乎適合與頁面的模型一起使用。這當然是我一直使用它的方式。但是我可以看到你想要達到的目標。我的意思是,你目前正在從你的資源庫中分配一個模型到頁面模型。如果您將回購模型分配給ViewBag並將評論分配給頁面模型會怎麼樣?你的觀點可能嗎?你能詳細說明你爲什麼不想使用ViewModel嗎? – kim3er 2010-12-20 23:37:06

+0

我在頁面上使用了幾個模型,所以我不能只交換一個模型。令人沮喪的是我認爲這是可能的(或應該是),只是不知道語法。 – 2010-12-22 02:37:24

1

如果由於某種原因,我需要使用ViewData將模型傳遞到我的視圖中,我執行以下操作以允許Html.DisplayFor()助手。

在視圖代碼塊I鑄的ViewData模型對象到其基礎類型

var newCommentModel = (NewComment)ViewBag.NewComment; 

然後我使用強類型的參考

@Html.DisplayFor(model => newCommentModel) 

表達分配以下表達式來輔助樹現在包含一個強類型模型,DisplayTemplate正確顯示。