在HTML属性中有一种方法可以连接字符串吗?

29

我正在使用MVC3,希望使用部分视图来创建动态DOM元素。这是我的当前部分视图:

@model MVCApp.ViewModels.TitlesViewModel

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

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

id="label"+"1"
所以如果我尝试做这样的事情:
alert($("#label1").text())

有一个没有内容的警告框。

那么我该如何将这两个字符串相加以形成一个可被jQuery(或document.getElementByID(str))识别的连贯字符串呢?

5个回答

67

试试这个(已验证):

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

1
这个代码可行:<div id="@("label"+Model.Id)" class="display-field">@Model.InitValue</div>,非常感谢。 - user558594
3
刚才我添加了引号(当你发布评论时)。 :) - Mrchief
1
是的,我看到了。虽然谢谢你的帮助。但我对MVC3和Razor语法还很陌生。 - user558594

4

您希望:

<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认为它是一个电子邮件地址,因此不会对其进行处理!


我试过了。在我的浏览器的HTML源代码中,该ID只是“label@Model.Id”。 - user558594

2

我想提供另一种解决方案,因为这是我在尝试将字符串和模型值作为id连接到@html.ActionLink和文本值时所使用的方法。我需要使用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()) })

1
这是你需要做的事情。
id="label_@Model.Id"

需要使用下划线(_)。对我来说,没有使用下划线的id会出现问题。愉快地编程。


0
id="@("label")@Model.Id"

可以使用下划线(_)id="label_@Model.Id"或连字符(-)id="label-@Model.Id"来分隔。祝您拥有愉快的一天!


1
欢迎来到Stack Overflow!虽然这段代码可能解决了问题,但是包括解释它如何以及为什么解决了问题将有助于提高您的帖子质量,并可能导致更多的赞。请记住,您正在回答未来读者的问题,而不仅仅是现在提问的人。请[编辑]您的答案以添加解释并指出适用的限制和假设。 - Yunnosch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接