1

在我的 ASP.NET MVC 4 Web 应用程序中,我有两个模型:

  1. Block有一个属性Block LinkedBlock
  2. BlockCollection其中包含多个Block. 保证中的每个Block实例也在.Block.LinkedBlockBlockCollection

现在,我想做的是:
如果 aBlock有一个链接块,它应该得到一个onchange处理程序,将链接块的文本设置为该块的文本。

现在,原则上,这非常简单:

if (Model.LinkedBlock != null)
{
    var onChange = string.Format("setText({0}, this.text);", linkedBlockId);
    @Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}
<script type="text/javascript" language="javascript">
    function setText(id, text) {
        $("#" + id).val(text);
    }

但问题是,我不知道如何获取链接块的正确 HTML ID。

我如何得到它?

4

2 回答 2

1

渲染链接块时,只需将所需的任何 ID 添加到 HTML 帮助程序,例如:

@Html.TextBoxFor(m => m.Text, new { id = blockId });

您的唯一 ID在哪里blockId,比如数据库中的 ID 记录。稍后,您可以在构建onChange处理程序调用时引用此 ID。就像是:

var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.ID);

如果您提供更多上下文,我可以为您提供更多示例代码。

于 2013-04-11T19:27:44.827 回答
1

在块模型中,您应该有一个 Id 属性。然后根据您的观点,您可以引用该 ID。例如:

class Block
{
    public Block LinkedBlock { get; set; }
    public int Id { get; set; }
}

您的视图必须是强类型的:

@model Models.Block

或以下取决于您在做什么:

@model Models.BlockCollection

然后将您的代码更改为(只需添加对链接块的引用):

if (Model.LinkedBlock != null)
{
    var onChange = string.Format("setText({0}, this.text);", Model.LinkedBlock.Id);
    @Html.TextBoxFor(m => m.Text, new { onchange = onChange });
}

您显然必须确保所有linkedBlocks 都在页面上,并带有各自的ID。

这有帮助吗?

于 2013-04-11T19:38:13.820 回答