首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >覆盖嵌套EditorFor中的EditorFor ID字段

覆盖嵌套EditorFor中的EditorFor ID字段
EN

Stack Overflow用户
提问于 2012-02-13 00:59:08
回答 2查看 1.3K关注 0票数 0

您好,我正在尝试显式地更改EditorFor输出中的ID、Name和Validate For字段。

我有以下代码:

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

上面的代码以当前Model的名称作为所有字段的前缀。

我的临时解决方案如下(我知道它远非理想,但它是有效的!)

代码语言:javascript
复制
@Html.Raw(Html.EditorFor(x => ViewBag.NestedFormDatas).ToHtmlString().Replace("NestedForm", "DesiredPrefix"))
EN

回答 2

Stack Overflow用户

发布于 2012-02-13 02:23:10

我怀疑您需要更改idname属性,因为您没有使用视图模型。下面这句话似乎大错特错:

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

如果您正确使用视图模型,则不需要更改名称和If,因为编辑器模板已经生成了正确的值:

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

无论如何,一种可能性是为给定的类型编写一个自定义编辑器模板。因此,如果我们假设NestedFormDatas是一个字符串类型,您可以添加以下~/Views/Shared/EditorTemplates/String.cshtml编辑器模板来覆盖the default one,并允许您指定其他属性:

代码语言:javascript
复制
@Html.TextBox(
    "", 
    ViewData.TemplateInfo.FormattedModelValue,
    ViewData
)

然后:

代码语言:javascript
复制
@Html.EditorFor(x => x.NestedFormDatas, new { id = "foo" })

name属性而言,这不是TextBox帮助器可以覆盖的内容。如果需要的话,你必须编写自己的帮助器。但是,正如我所说的,如果使用视图模型,则永远不需要这样做,因为这正是视图模型的目的:视图模型是专门定义来匹配给定视图的需求的。

因此,消除代码中任何ViewBag的痕迹,开始定义视图模型。您将看到ASP.NET MVC将变得多么有趣和简单。

票数 2
EN

Stack Overflow用户

发布于 2012-02-13 02:15:48

您当然可以尝试使用htmlAttributes参数来使用TextBoxFor覆盖html属性:

代码语言:javascript
复制
@Html.TextBoxFor(x=>item.Name,new { id="newId"})

我在查看您的代码时所担心的是,您正在使用动态视图数据字典(ViewBag)和一个用于已知类型的对象属性的方法。我强烈建议用具有强类型集合的ViewModel替换ViewBag。这将解决字段命名的问题(我只是假设,但这是我唯一能想到的从输入元素中删除前缀的原因)

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

https://stackoverflow.com/questions/9250657

复制
相关文章

相似问题

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