ASP.Net MVC,动态属性和EditorFor /标签
我使用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))
我还没有尝试过,但这应该工作,我认为。
@(EditorFor(m => ViewBag.NewComment)
可以使用Linq-to-SQL语法,但在右侧使用完全不同的对象。
不知道您的评论模型是什么样子,我的直觉反应是只做到:
@Html.EditorFor(ViewBag.NewComment)
然而,因为ViewBag是动态的,您可能需要在使用它之前投射NewComment,以获得EditorFor mag我知道了。
@Html.EditorFor(ViewBag.NewComment as Comment)
更新
罢工,EditorFor只能接受一个表达式作为参数,并表达必须返回页面模型的属性。如果您不想使用ViewModel,我认为EditorFor或EditorForModel不会对您有任何用处。你有没有考虑将你使用Model的角色与ViewBag的角色进行切换?
您的意思是“您是否考虑过切换角色,无论您使用的是模型还是VIEWMODEL”?否则,我不确定你的意思。 – 2010-12-20 23:14:52
嗨,我的意思是EditorFor似乎适合与页面的模型一起使用。这当然是我一直使用它的方式。但是我可以看到你想要达到的目标。我的意思是,你目前正在从你的资源库中分配一个模型到页面模型。如果您将回购模型分配给ViewBag并将评论分配给页面模型会怎么样?你的观点可能吗?你能详细说明你为什么不想使用ViewModel吗? – kim3er 2010-12-20 23:37:06
我在页面上使用了几个模型,所以我不能只交换一个模型。令人沮丧的是我认为这是可能的(或应该是),只是不知道语法。 – 2010-12-22 02:37:24
如果由于某种原因,我需要使用ViewData将模型传递到我的视图中,我执行以下操作以允许Html.DisplayFor()助手。
在视图代码块I铸的ViewData模型对象到其基础类型
var newCommentModel = (NewComment)ViewBag.NewComment;
然后我使用强类型的参考
@Html.DisplayFor(model => newCommentModel)
表达分配以下表达式来辅助树现在包含一个强类型模型,DisplayTemplate正确显示。
做这个工作? – 2013-04-19 09:01:42
@bahadirarslan这不起作用(表达式树不能包含动态表达式)。作为一种可能的解决方法,您可以将动态模型转换为其基础类型(请参阅我对此解决方法的回答)。 – 2014-05-15 11:10:25
这对定制编辑器也不起作用。例如,在你的模型上使用像这样的'[DataType(DataType.Html),UIHint(“tinymce_jquery_full”),AllowHtml]'的UIHint。最好创建一个局部视图并将模型对象传递给它。 – 2016-02-15 16:38:31