有没有办法在html属性中连接字符串?

时间:2011-07-12 21:03:36

标签: html asp.net-mvc-3

我正在使用MVC3,我想使用局部视图来创建动态DOM元素。这是我目前的部分观点:

@model MVCApp.ViewModels.TitlesViewModel

<div class="display-label">Name</div>
<div id="label"+"@Model.Id" class="display-field">@Model.InitValue</div>

Model.Id是1,但在浏览器的HTML中,我目前得到:

id="label"+"1"

所以,如果我尝试做类似的事情:

alert($("#label1").text())

有一个警告框,里面没有任何内容。

那么如何将两个字符串一起添加以形成一个由jQuery(或document.getElementByID(str)识别的连贯字符串)。

4 个答案:

答案 0 :(得分:48)

试试(验证):

<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>

答案 1 :(得分:2)

你想:

<div id="label@Model.Id" ...

Razor会将@识别为代码的开头,执行它并在属性中生成结果。

编辑:

这不适用于评论,但这是我的一个Razor控件中的一行:

<input type="text" readonly="readonly" 
       class="display-field display-field-@ViewData.ModelMetadata.PropertyName" 
       id="@((ViewData["id"] == null) ? 
         ViewData.ModelMetadata.PropertyName : ViewData["id"])"
       value="@Proj.GetJobStatusValue(Model)" />

尝试在@之前添加连字符( - )。 Razor很可能认为这是一个电子邮件地址并且不管它!

答案 2 :(得分:1)

添加另一个选项,因为在我尝试将字符串和模型值作为@html.ActionLink中的id连接以及文本值时,这对我有用。我需要使用string.Concat。从性能的角度来看,不知道这是不是坏事。

  @Html.ActionLink(string.Concat("View all (", @Model.FooCount, ")"),
        //actionName        
        "SeeAllFoos",
        //ControllerName
        "Foo",
        // routeValues
        new { FooId = @Model.Foo.id },
        //htmlAttributes
        new { @class = "btn btn-success", onclick = "ShowProgress();",
        id = string.Concat("Foo",@Model.Foo.id.ToString()) })

答案 3 :(得分:1)

这是您需要做的。

id="label_@Model.Id"

需要下划线(_)。对我来说,在不使用下划线的情况下传递ID会引起问题。祝你生日快乐。