这个非常有用的方法的签名表明,我可以指示一个类型:
public static MvcHtmlString EditorFor<TModel, TValue>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TValue>> expression
)..。可以理解的是,TModel是“模型的类型”。这种描述对我毫无意义,这一定是我的特别爱好。我在谷歌上搜索了一个解释,但找到了齐尔奇。
我所处的视图是@model Website.Models.Product,但我想为不同类型的东西创建一个编辑器。我想我可以:
@Html.EditorFor(@ViewBag.AClassOfTheOtherType)或者也许(我很明显是在猜测):
@Html.EditorFor(TheOtherType)但这是不可接受的语法,所以我想:
@Html.EditorFor(x => x...)但是lambda的表达式似乎与@model有关.于是我想,“啊!”
@Html.EditoFor<TheOtherType>(...)但是VS认为<启动一个HTML标记并指示我的EditorFor调用的结束(失败)。
啊!
我如何做到这一点(如果我真的需要问)?
发布于 2011-05-22 01:55:35
答案是(请鼓点).是的,可以将lambda表达式绑定到类型声明器。唯一的问题是Visual编辑器,它认为一个是结束C#部件,然后用开头<输入HTML,因此不允许正确的代码。解决方案:
@{ Html.EditoFor<TheOtherType>(...) }发布于 2011-05-16 05:52:34
还没有测试过这个,但你不能这样做吗?
@Html.EditorFor(x => ViewBag.AClassOfTheOtherType)您不一定需要使用传入Lambda的变量。
发布于 2011-05-15 20:24:38
模型-是MVC中的模型-M
TModel也可以是sdserweJJG --它只是一贯地将TModel称为“脱俗”。
在EditorFor的helper方法中,您将看到如下内容:
TValue val = expression.Compile()(htmlHelper.ViewData.Model);在这里,扩展方法编译传入的lambda --例如x=>x.Model.Property部件--并获取实际的模型数据,用于构建实际的显示控件。
当从控制器操作调用return View(viewModel);时,模型将传递给视图。
您试图做的事情是没有意义的,因为该方法是为使用视图模型而设计的。
但是,您可以使用@Html.Editor,因为这将以您正在尝试的方式获得实际值:
@Html.Editor(ViewBag.AClassOfTheOtherType)MVC的源代码可以免费下载和查看--值得花时间这样做:)
https://stackoverflow.com/questions/6010613
复制相似问题