首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EditorFor + TModel

EditorFor + TModel
EN

Stack Overflow用户
提问于 2011-05-15 19:15:38
回答 3查看 1.4K关注 0票数 1

这个非常有用的方法的签名表明,我可以指示一个类型:

代码语言:javascript
复制
public static MvcHtmlString EditorFor<TModel, TValue>(
    this HtmlHelper<TModel> html,
    Expression<Func<TModel, TValue>> expression
)

..。可以理解的是,TModel是“模型的类型”。这种描述对我毫无意义,这一定是我的特别爱好。我在谷歌上搜索了一个解释,但找到了齐尔奇。

我所处的视图是@model Website.Models.Product,但我想为不同类型的东西创建一个编辑器。我想我可以:

代码语言:javascript
复制
@Html.EditorFor(@ViewBag.AClassOfTheOtherType)

或者也许(我很明显是在猜测):

代码语言:javascript
复制
@Html.EditorFor(TheOtherType)

但这是不可接受的语法,所以我想:

代码语言:javascript
复制
@Html.EditorFor(x => x...)

但是lambda的表达式似乎与@model有关.于是我想,“啊!”

代码语言:javascript
复制
@Html.EditoFor<TheOtherType>(...)

但是VS认为<启动一个HTML标记并指示我的EditorFor调用的结束(失败)。

啊!

我如何做到这一点(如果我真的需要问)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-05-22 01:55:35

答案是(请鼓点).是的,可以将lambda表达式绑定到类型声明器。唯一的问题是Visual编辑器,它认为一个是结束C#部件,然后用开头<输入HTML,因此不允许正确的代码。解决方案:

代码语言:javascript
复制
@{ Html.EditoFor<TheOtherType>(...) }
票数 0
EN

Stack Overflow用户

发布于 2011-05-16 05:52:34

还没有测试过这个,但你不能这样做吗?

代码语言:javascript
复制
@Html.EditorFor(x => ViewBag.AClassOfTheOtherType)

您不一定需要使用传入Lambda的变量。

票数 2
EN

Stack Overflow用户

发布于 2011-05-15 20:24:38

模型-是MVC中的模型-M

TModel也可以是sdserweJJG --它只是一贯地将TModel称为“脱俗”。

在EditorFor的helper方法中,您将看到如下内容:

代码语言:javascript
复制
 TValue val = expression.Compile()(htmlHelper.ViewData.Model);

在这里,扩展方法编译传入的lambda --例如x=>x.Model.Property部件--并获取实际的模型数据,用于构建实际的显示控件。

当从控制器操作调用return View(viewModel);时,模型将传递给视图。

您试图做的事情是没有意义的,因为该方法是为使用视图模型而设计的。

但是,您可以使用@Html.Editor,因为这将以您正在尝试的方式获得实际值:

代码语言:javascript
复制
@Html.Editor(ViewBag.AClassOfTheOtherType)

MVC的源代码可以免费下载和查看--值得花时间这样做:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6010613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档