jquery – MVC3 Html.DisplayFor – 可以让这个控件生成一个ID吗?

前端之家收集整理的这篇文章主要介绍了jquery – MVC3 Html.DisplayFor – 可以让这个控件生成一个ID吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要显示一些文本,但也可以通过jQuery修改文本.
<%= Html.DisplayFor(model => model.DeviceComponentName)%>

如果我使用EditorFor而不是DisplayFor,我会看到输入控件的ID.但是,我不希望以这种方式编辑该值.所以我已经做了一个DisplayFor,但它不会生成元素的ID属性.

我应该将DisplayFor包装在div中,并执行以下操作:

<div id="<%= ViewData.TemplateInfo.GetFullHtmlFieldName("DeviceComponentName") %>">
    <%= Html.DisplayFor(model => model.DeviceComponentName)%>
</div>

$('#DeviceComponentName').text('newValue');

还是有一个更清洁的方式实现这一点?

更新:有没有办法不依赖硬编码的字符串?某些东西与对象本身相关联,因此如果我的属性名称更改,我会得到一个编译错误

另外,我使用这个代码,但是我看不到ID值出现:

<td class="editableValue">
    <%--Label should be editable,so it needs an ID,but only will be edited by jQuery so it can't be an EditorFor--%>
    <%= Html.DisplayFor(model => model.DeviceComponentName,new { id = "DeviceComponentName" })%>
    <button type="button" id="ComponentTreeButton" class="nestedDialogButton">...</button>
</td>

解决方法

为避免“魔术字符串”输入(如果您的模型属性更改),您可以使用扩展名.它也使得更清洁的代码
public static MvcHtmlString DisplayWithIdFor<TModel,TValue>(this HtmlHelper<TModel> helper,Expression<Func<TModel,TValue>> expression,string wrapperTag = "div")
{
    var id = helper.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
    return MvcHtmlString.Create(string.Format("<{0} id=\"{1}\">{2}</{0}>",wrapperTag,id,helper.DisplayFor(expression)));
}

然后简单地使用它:

@Html.DisplayWithIdFor(x => x.Name)

会产生

<div id="Name">Bill</div>

或者如果你想要它被包裹在一个跨度:

@Html.DisplayWithIdFor(x => x.Name,"span")

哪个会:

<span id="Name">Bill</span>

非剃刀

对于非Razor语法,您只需使用它:

<%= Html.DisplayWithIdFor(x => x.Name) %>

和:

<%= Html.DisplayWithIdFor(x => x.Name,"span") %>

猜你在找的jQuery相关文章