如何在使用MVC2的EditorFor帮助程序时控制html元素的id和名称

时间:2010-06-21 15:23:19

标签: c# asp.net-mvc-2

我正在重构我的MVC2代码库以使用ViewModel方法。因此,我传递给我的视图以呈现表单的模型现在看起来像

model.TheObject
model.TheCollectionOfOtherObjects

我正在尝试使用HTML.EditorFor帮助器为数据类型呈现模板编辑器。它曾经在我尝试直接在视图中呈现TheObject时工作,现在有一个间接级别,我得到一个完全不同的默认对象命名方案:

例如:

在我重构到ViewModel之前,我输出了一个特殊的基于JQuery的日期选择器:

<%: Html.EditorFor(model => model.StartDate, String.Format("{0:M/d/yyyy}", Model.StartDate))%> 

输出:

<input id="StartDate" name="StartDate" type="text" value="7/5/2010 11:10:25 AM" />            

所有人都对JQuery的土地感到高兴。

然后我更改了视图以使用包含TheObject的ViewModel并将我的EditorFor代码更改为以下内容:

    <%: Html.EditorFor(model => model.TheObject.StartDate, String.Format("{0:M/d/yyyy}", Model.TheObject.StartDate))%> 

现在呈现以下HTML:

    <input id="TheObject_StartDate" name="TheObject.StartDate" type="text" value="7/5/2010 11:10:25 AM" />    

这在我的客户端自然会破坏我的JQuery,我更喜欢在html元素上更多地控制输出id和name属性。

关于我如何更改传递给EditorFor

的lamba表达式的任何想法

由于

2 个答案:

答案 0 :(得分:1)

为什么不直接使用CSS选择器,或者匹配ID但是看看结尾如$(“input [id $ ='StartDate']”)?

用这种方法可以控制的只有这么多;可以只使用Html.TextBox而不使用For语法。这让你完全控制......

TextBoxFor方法,使用它提供的ID,确保服务器的任何帖子都可以重新创建相同对象类型的模型跟踪...

HTH。

答案 1 :(得分:0)

迟到了,但是为了别人的利益,有一个Html.IdFor()可以让你获得生成的ID。然后,您可以将其写入JavaScript for JQuery以供使用。

<%: Html.IdFor(model => model.TheObject.StartDate) %>